ホームページ  >  記事  >  バックエンド開発  >  要素をあるスライスから別のスライスに移動する方法

要素をあるスライスから別のスライスに移動する方法

WBOY
WBOY転載
2024-02-10 17:40:081049ブラウズ

要素をあるスライスから別のスライスに移動する方法

php エディター Apple は、あるスライスから別のスライスに要素を移動する方法を紹介します。プログラミングでは、スライスは複数の要素を格納できる一般的に使用されるデータ構造です。場合によっては、あるスライスから要素を取り出して別のスライスに移動する必要があります。このプロセスには、要素の削除、挿入、インデックス付け操作などが含まれる場合があります。次に、誰もがスライスに関する関連知識をよりよく理解し、適用できるように、この操作を実装する方法について詳しく説明します。

質問内容

package main

import (
    "fmt"
)

func main() {
    arr0 := []int{
        1,2,3,4,5,
    }
    arr1 := []int{}

    fmt.println(arr0)
    fmt.println(arr1)
    fmt.println("transferring...")
    transfer(&arr0, &arr1)
    fmt.println(arr0)
    fmt.println(arr1)
}

func transfer(arr0 *[]int, arr1 *[]int) {
    tmp := make([]int, 0)
    for i:=0;i<len(*arr0);i++ {
        tmp = append(tmp, (*arr0)[i])
    }

    arr1 = &tmp
    s := make([]int, 0)
    arr0 = &s
}

伝達関数として、スライス arr0 の要素をスライス arr1 と空のスライス arr0 に転送する予定です。

しかし成功しません

これは私の出力です

リーリー

転送後、次の結果が必要です。 [] [1 2 3 4 5] しかし実際には、main 関数の arr0 と arr1 は同じままです。

これがうまくいかない理由を誰か教えてもらえますか?

私の記憶では、次のようになっているはずです

伝達関数の実行後

解決策

これらの 2 行:

リーリー

関数内のローカル変数

arr1arr0 を変更します。これらの変数はたまたまポインタですが、main によって提供される入力ポインタの単なるコピーであり、入力ポインタへの 参照 ではありません。

ポインター自体ではなく、

arr1 および arr0 ポインターが指すものを変更すると、main によって提供される値が変更されることがわかります。 リーリー

以上が要素をあるスライスから別のスライスに移動する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。