配列は、固定長の特定のタイプの要素で構成されるシーケンスです。配列は、0個以上の要素で構成できます。
1.配列を作成するいくつかの方法
- 配列の長さと指定されたデータの初期化で作成
arr1 := [10]int {3,6,9,4,5,3,5,7,8,2} fmt.Println(arr1) // [3 6 9 4 5 3 5 7 8 2] fmt.Println(len(arr1)) // 10
- 初期化パラメータの数に応じて作成
arr2 := [...]int {3,6,9,4,5,3,5,7,8} fmt.Println(arr2) // [3 6 9 4 5 3 5 7 8] fmt.Println(len(arr2)) // 9
- 指定された長さ0の値で要素の作成を初期化します。最初の値は長さ0の値を指定しますlengthnumber
arr3 := [...]int{10:2,-1} fmt.Println(arr3) // [0 0 0 0 0 0 0 0 0 0 2 -1] fmt.Println(len(arr3)) // 12 --> 10个0 + 后续两个数据
2.アレイアクセス
配列の各要素には、インデックス添え字を介してアクセスできます。インデックス添え字の範囲は、0から配列の長さから1を引いた位置までです。Go組み込み関数len()を使用して、データの長さを取得できます。
arr4 := [...]int{10: 2,-1}
fmt.Println(arr4[10])
// 2
配列のループアクセス
arr5 := [...]int{10: 2,-1}
for _, v := range arr5 {
fmt.Printf("%d\n", v)
}
3.アレイの使用に関する公式の指示
- 配列は値です。ある配列を別の配列に割り当てると、すべての要素がコピーされます。
- 特に、配列を関数に渡すと、配列へ のポインターではなく、配列のコピーを受け取り ます。
- 配列のサイズはその型の一部です。型
[10]int
と[20]int
は異なります。 配列のサイズはその型の一部です 。[10] int型と[20] int型が異なります
- 配列は値オブジェクトであり、配列を別の配列に割り当てると、すべての要素がコピーされます。
arr6 := [...]int{0,0,0} arr7 := arr6 arr7[2] = 2 fmt.Println(arr6) fmt.Println(arr7) // arr6 --> [0 0 0] // arr7 --> [0 0 2]
- 配列を関数に渡すと、配列へのポインターではなく、配列のコピーを受け取ります。
配列を参照渡しする場合は、配列のポインタ型を渡す必要がありますarr8 := [2]int{1,2} fmt.Println(arr8) swap(arr8) fmt.Println(arr8) // [1 2] // [1 2] func swap(arr8 [2]int){ temp := arr8[0] arr8[0] = arr8[1] arr8[1] = temp }
arr8 := [2]int{1,2} fmt.Println(arr8) swap(&arr8) fmt.Println(arr8) func swap(arr8 *[2]int){ temp := arr8[0] arr8[0] = arr8[1] arr8[1] = temp } // [1 2] // [2 1]
- 配列のサイズはその型の一部です。[10] int型と[20] int型が異なります。
arr9 := [...]int{0,0,0}
arr9 = [...]int{0,0,0,0} // Cannot use '[...]int{0,0,0,0}' (type [4]int) as type [3]int
配列のサイズ(長さ)が一定でない場合、コンパイラーはタイプが異なることを直接プロンプトします。
4.詳細な説明
- 配列比較の問題。==比較演算子を使用して、2つの配列を直接比較します。2つの配列のすべての要素が等しい場合にのみ、配列は等しくなります。
arr10 := [3]int{1,1,1} arr11 := [3]int{1,1,1} fmt.Println(arr10 == arr11) // true arr12 := [3]int{1,1,1} arr13 := [...]int{1,1,2} fmt.Println(arr12 == arr13) // false
- 配列とスライスの変換
arr14 := [10]int {3,6,9,4,5,3,5,7,8,2} // fmt.Println(append(arr14,10)) 会报错,Cannot use 'arr14' (type [10]int) as type []Type arr15 := arr14[:5] fmt.Println(arr15) arr16 := append(arr15,10) fmt.Println(arr16) // [3 6 9 4 5] // [3 6 9 4 5 10]
- このスタイルは慣用的なGoではありません。代わりにスライスを使用してください。公式には、このスタイルの配列は慣用的ではありません。スライスの使用をお勧めします