Golang の「array」と「slice{array,array,...}」の違いは何ですか?これは多くの初心者からよく聞かれる質問です。 PHP エディター Zimo が答えます: Golang では、「配列」は固定長のシーケンスであり、一度定義すると長さを変更することはできません。 「スライス」は、必要に応じて拡張または縮小できる動的な長さのシーケンスです。さらに、「配列」の長さは定義時に決定されますが、「スライス」の長さは実行時に動的に変更できます。したがって、使用する場合は、実際のニーズに基づいて適切なデータ構造を選択する必要があります。
理由を知りたいのでヒントをお願いします。
配列を res
に追加したいのですが、res
は 2D スライスです。したがって、最初に変換する必要があります。
配列をスライスに変換すると、エラーが発生します。
しかし、結果は私が望むものではありません。
次に、for ループを暫定的に変更しました
リーリー リーリー結果は正しいですが、なぜですか?
k[:]
と []int{k[0],k[1],k[2]}
の違いは何ですか?
ループを
に変更します リーリー元のループでは、メモリ内の特定の場所を持つ [3]int
型の変数 k
を宣言しています。ループの各反復では、マップ mm
からの異なるキーがこの変数にコピーされます。ここまでは順調ですね。
k[:]
を使用してスライスに変換すると、 配列 k を指すスライス ヘッダーが作成されます。ここで問題が発生しました。ループの次の反復で、
k の値が上書きされました。ループ内で作成されたすべてのスライスは、メモリ内の同じ場所にある同じバッキング配列
k を指します。
k の値をループ内で宣言された変数にコピーすることで、各スライスに独自のバッキング配列を与えることで、この問題を回避できます。
以上がGolang の「array」と「slice{array,array,...}」の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。