Golang は現在人気のあるプログラミング言語であり、その組み込みデータ型スライスは非常に一般的に使用されています。スライスとはメモリ上にある連続したデータの塊のことで、配列とは異なり動的に長さが可変になる特徴があります。この記事ではGolangスライスの使い方を詳しく紹介します。
Golang でスライスを作成するには 2 つの方法があります:
(1) make() 関数を使用してスライスを作成します。
make() 関数は、Golang でスライス、マップ、チャネルなどを作成するために使用される関数です。 make() 関数を使用してスライスを作成する場合は、スライスのタイプ、長さ、容量を指定する必要があります。以下に示すように:
s := make([]int, 5, 10)
上記のコードは、5 つの要素を含む int 型のスライスを作成し、10 個の要素に記憶領域を割り当てます。このうち長さは5本、容量は10本です。
(2) リテラル モードを使用してスライスを作成する
リテラル モードでは、スライスを初期化し、その初期値を定義できます。以下に示すように:
s := []int{1, 2, 3, 4, 5}
上記のコードは、5 つの要素を含む int 型のスライスを作成し、{} を通じてその初期値を定義します。
配列と同様に、スライス要素には添字を使用してアクセスすることもできます。以下に示すように:
s := []int{1, 2, 3, 4, 5} s[0] // 访问第一个元素 s[1] // 访问第二个元素 ...
(1) for ループを使用してスライスを走査します
for ループを使用してスライスを走査し、要素の各値を取得します。以下に示すように:
s := []int{1, 2, 3, 4, 5} for i := 0; i < len(s); i++ { fmt.Println(s[i]) }
(2) range キーワードを使用してスライスを走査する
range キーワードを使用すると、より簡単にスライスを走査して各要素の値を取得できます。以下に示すように:
s := []int{1, 2, 3, 4, 5} for _, v := range s { fmt.Println(v) }
上記のコードで _ を使用すると、添え字の戻り値が無視され、要素の値のみが取得されます。
Golang では、スライスをカットして、より小さなスライスを取得できます。
スライスの切り取り操作はコロン(:)で実行され、以下のように最初のコロンの前の数字が開始位置、最初のコロンの後の数字が終了位置(この位置を除く)を示します。 :
s := []int{1, 2, 3, 4, 5} s1 := s[1:3] // s1变成了[2, 3]
上記のコードでは、s1 は s[1] から始まり s[3] までです (s[3] を除く)。
コロン前の数字を省略した場合は、スライスの最初の要素から開始することを意味します。コロン以降の数字を省略した場合は、スライスの最後の要素までカットすることを意味します。
スライスには長さが動的に変化する特性があるため、1 つ以上の要素を既存のスライスに追加できます。
組み込み関数 append() を使用して、1 つ以上の要素をスライスに追加できます。 append() 関数は、新しく追加された要素に対応するためにスライスの容量を自動的に拡張します。
s := []int{1, 2, 3, 4, 5} s = append(s, 6) // 追加一个元素6 s = append(s, 7, 8, 9) // 追加三个元素7、8、9
Golang では、slice には要素を削除する組み込み関数がありませんが、append() 関数を組み合わせて使用できます。要素を削除するカット操作の機能。
たとえば、スライスの 3 番目の要素を削除するには、次の手順を実行します。
(1) スライスの切り取り操作を使用して、削除する要素を削除します。次のとおりです。
s := []int{1, 2, 3, 4, 5} s = append(s[:2], s[3:]...)
上記のコードでは、append() 関数を使用して、スライス内の 3 番目の要素 s[2] を削除する切断操作と連携します。
(2) for ループを使用してスライスを走査し、削除する要素を見つけて、スライスの切断操作を使用して削除します。
Golang では、組み込み関数 copy() を使用してスライスをコピーできます。
s1 := []int{1, 2, 3, 4, 5} s2 := make([]int, len(s1)) copy(s2, s1)
上記のコードでは、make() 関数を使用して s1 と同じ長さのスライス s2 を作成し、copy() 関数を使用して s1 の要素を s2 にコピーします。
コピーされた要素の数がターゲット スライスの容量を超える場合、copy() 関数はターゲット スライス内の要素のみをコピーします。ターゲット スライスがソース スライスより大きい場合、値 0 の要素がターゲット スライスの末尾に追加されます。
概要
上記の内容を通じて、スライスの主な特徴をまとめることができます。
(1) スライスは動的に可変長のシーケンスです。
(2) スライスの基本操作には、要素の作成、アクセス、走査、切り取り、要素の追加、要素の削除、コピーが含まれます。
(3) make() 関数またはリテラル メソッドを使用してスライスを作成します。
(4) スライス要素にアクセスするには、添字または range キーワードを使用します。
(5) 切断操作を使用してスライスを分割し、append() 関数を使用して要素を追加し、copy() 関数を使用してスライスをコピーします。
つまり、スライスは Golang の組み込みデータ型として非常に重要な役割を果たします。動的に可変長のデータ構造が必要な場合は、最初にスライスを使用できます。
以上がgolangスライスの使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。