ホームページ  >  記事  >  バックエンド開発  >  一般的な golang のスライス操作の概要

一般的な golang のスライス操作の概要

PHPz
PHPzオリジナル
2023-04-10 14:21:32649ブラウズ

Go 言語では、Slice は非常に一般的なデータ型です。実際の開発では、配列(Array)に比べてスライスの方が柔軟性が高く便利です。次に、Go 言語で Slice を使用する方法について説明します。

まず、スライスと配列のいくつかの基本概念を明確に理解する必要があります。 Go 言語では、配列は固定サイズのデータ​​構造ですが、スライスは動的に変化するシーケンスです。さらに、Slice の基礎となる層は配列によって実装されます。 Slice の構造は次のとおりです。

type slice struct {
    array unsafe.Pointer // 指向底层数组的指针
    len   int            // slice 的长度(元素数量)
    cap   int            // slice 的容量
}

Slice は make 関数によって作成でき、その構文は次のとおりです。

slices := make([]T, len, cap)

このうち、T は任意の型で、len はその型を表します。 Slice の長さ、cap は Slice の容量を表します。作成されたスライスは基礎となる配列へのポインタであるため、スライスが変更されると基礎となる配列に影響を与えることに注意してください。

スライスのデータ アクセスは配列と似ており、添え字を使用して要素にアクセスできます。例:

slices := []string{"Apple", "Banana", "Orange", "Grape"}

fmt.Println(slices[0]) // Apple

fmt.Println(slices[1:3]) // [Banana Orange]

Slice はスライス (Slice) して新しい Slice を返すことができることに注意してください。例: slices[1:3] は、1 から 3 までの新しいスライスです。

次に、Slice の操作をいくつか見てみましょう。

  1. append

要素をスライスの最後に追加します。 append 関数には 2 つの戻り値があり、1 つ目は追加されたスライス、2 つ目はメモリを再割り当てする必要があるかどうかです。例:

slices := []int{1, 2, 3, 4, 5}

slices = append(slices, 6)

fmt.Println(slices) // [1 2 3 4 5 6]

スライスの容量が不十分な場合、追加によりメモリが再割り当てされることに注意してください。

  1. 要素の削除

追加関数とスライス操作を使用して、スライス内の要素を削除します。例:

slices := []int{1, 2, 3, 4, 5}

slices = append(slices[:2], slices[3:]...)

fmt.Println(slices) // [1 2 4 5]

上記のコードの操作は、スライスから 3 を削除することです。

  1. len と cap

スライスの長さと容量は、len 関数と cap 関数を通じて取得できます。例:

slices := make([]int, 3, 5)

fmt.Println(len(slices)) // 3

fmt.Println(cap(slices)) // 5

スライスに要素を追加するときに、容量が不十分な場合、容量が十分になるまでスライスの長さが自動的に増加することに注意してください。

  1. copy

あるスライスから別のスライスに要素をコピーします。元の要素が上書きされないようにするには、最初に十分なスペースを割り当てる必要があることに注意してください。例:

a := []int{1, 2, 3}

b := make([]int, len(a))

copy(b, a)

fmt.Println(b) // [1 2 3]

ターゲット スライスの長さがソース スライスより小さい場合、ターゲット スライスの長さ要素のみがコピーされることに注意してください。

上記は、一般的なスライス操作の一部です。 Slice は実際には基になる配列へのポインターであるため、Slice を操作するときは基になる配列のデータを変更しないように注意する必要があることに注意してください。さらに、Slice の長さは変更できるため、配列よりも柔軟で便利です。

以上が一般的な golang のスライス操作の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。