var sliceName [][]…[]sliceType
このうち、sliceNameはスライスの名前、sliceTypeはスライスの種類、各[ ]
はディメンションを表し、複数のディメンションを持つスライスには複数の[ ]
が必要です。
例として 2 次元スライスを取り上げ、2 次元スライスを宣言して値を割り当てます。コードは次のとおりです。
// 二次元スライスを宣言する
var slice [][]int
// 二次元スライスに値を割り当てる
slice = [][]int{{10}, {100, 200}}
上記のコードは次のように省略することもできます。
// 二次元の整数型スライスを宣言し、値を設定する
slice := [][]int{{10}, {100, 200}}
上のコードは 2 つの要素を含む外側のスライスを示しており、各要素には内側の整数スライスが含まれています。
スライスには 2 つの要素が含まれており、各要素はスライスであり、最初の要素のスライスは単一の整数 10 で初期化され、2 番目の要素のスライスには 2 つの整数、つまり 100 と 100 が含まれていることがわかります。 200。
この組み合わせにより、ユーザーは非常に複雑で強力なデータ構造を作成できるようになり、次に示すように、組み込み関数append()について前述したルールを組み合わせたスライスにも適用できます。
【例】スライスを組み合わせたスライス
// 二次元の整数のスライスを宣言し、値を代入する
slice := [][]int{{10}, {100, 200}}
// 最初のスライスに値20を追加する
slice[0] = append(slice[0], 20)
Go 言語の append() 関数を使用して追加を処理する方法は非常に簡単です。まずスライスを増やし、次に新しい整数スライスを外側のスライスの最初の要素に代入します。上記のコードの操作が完了した後、次の図に示すように、スライスを外側のスライスのインデックス 0 の要素にコピーします。
このような単純な多次元スライスであっても、操作には多くのレイアウトと値が含まれており、関数間でデータ構造を渡すのは非常に複雑ですが、スライス自体は非常に単純な構造をしており、関数間での受け渡しが可能ですわずかなコストで。