ホームページ >バックエンド開発 >Golang >Golangでスライスを使用する方法

Golangでスライスを使用する方法

PHPz
PHPzオリジナル
2023-04-27 09:08:491131ブラウズ

Golang は非常に効率的で習得しやすいプログラミング言語であり、実際のプロジェクト開発で広く使用されています。スライスは golang の非常に重要なデータ構造であり、配列やスライスをより便利に操作できるようになります。この記事ではgolangでスライスを使う方法を紹介します。

1. スライスの定義と初期化

golang では、スライスを使用して配列のサイズを動的に調整できます。スライスは、基になる配列へのポインタ、長さ、および容量によって表されます。スライスの長さはスライスに含まれる要素の数を指し、容量はスライスが保持できる要素の数を指します。したがって、次の方法でスライスを定義して初期化できます:

var slice []int             // 通过 var 关键词声明一个空切片
slice1 := make([]int, 5)    // 通过 make 函数创建一个长度为 5 的切片
slice2 := []int{1, 2, 3}    // 直接指定切片中的元素
slice3 := []int{0: 1, 2: 3} // 通过索引初始化切片中的元素

2. スライスに要素を追加します

append() 関数を使用して要素をスライスに追加します。スライスは (必要に応じて) 展開されます。例は以下のとおりです。

slice = append(slice, 1) // 在 slice 的末尾添加一个元素
slice = append(slice, 2, 3) // 在 slice 的末尾添加两个元素

なお、要素追加時にスライスの長さが容量を超えた場合、append()関数により自動的に容量が拡張されます。展開するとき、golang は新しい基になる配列を作成し、元の要素を新しい配列にコピーします。したがって、複数のループでスライスに多数の要素を追加することは推奨されません。これは、頻繁な展開操作につながり、パフォーマンスに影響を与えることになります。

3. スライスから要素を削除する

golang では、通常、スライス内の要素を削除するには、値を再割り当てします。以下は一般的な実装です:

slice = append(slice[:i], slice[i+1:]...) // 从切片中删除第 i 个元素

このコードは、元のスライスを 2 つの部分に分割し、それらを結合します。このうち、slice[:i]はスライスの先頭からi番目の要素(i番目の要素を除く)までを意味し、slice[i 1:]はi番目の要素からスライスの最後までを意味します。 。 2 つのスライスのうち、1 つは保持する必要があるすべての要素を含み、もう 1 つは削除する必要がある要素を含みません。最後に、... 演算子を使用してこれらを結合します。

さらに、copy() 関数を使用して要素を削除することもできます。例は次のとおりです。

copy(slice[i:], slice[i+1:]) // 从切片中删除第 i 个元素
slice = slice[:len(slice)-1] // 删除切片中的最后一个元素

上記のコードでは、copy() 関数は、削除する必要がある要素の後のすべての要素を順番に 1 つ前に移動し、最終的にスライスの長さを減らします。削除された要素の長さに達するまで 1 ずつ増加します。

4. スライスのコピーとインターセプト

Golang には、スライスのコピーとインターセプトのための 2 つの組み込み関数 copy() と append() が用意されています。以下に、これら 2 つの関数の使用法をそれぞれ紹介します。

  1. copy() 関数
var slice1 []int // 定义一个空切片
slice2 := make([]int, 5) // 创建一个长度为 5 的切片
copy(slice1, slice2) // 将 slice2 复制到 slice1 中

copy() 関数は 2 つのスライスのみをコピーすることに注意してください。同じ要素です。ソース スライスの長さがターゲット スライスの長さよりも長い場合、ターゲット スライスに収まる要素のみがコピーされ、余分な要素は切り捨てられます。宛先スライスの長さがソース スライスの長さより長い場合、宛先スライス内の余分な要素はデフォルト値に設定されます。

  1. append() 関数
var slice1 []int // 定义一个空切片
slice2 := []int{1, 2, 3} // 创建一个切片并初始化
slice1 = append(slice1, slice2...) // 将 slice2 追加到 slice1 中

append() 関数を使用する場合、スライスを別のスライスに追加する場合は、 を使用する必要があることに注意してください。 .. 演算子を使用して展開します。この方法では、ソース スライスが全体としてターゲット スライスに追加されるのではなく、ソース スライスがターゲット スライスに拡張されます。

5. スライスのトラバーサル

golang の for ループを使用して、スライス内の要素をトラバースできます。例は次のとおりです。

for i, val := range slice {
    fmt.Printf("Index: %d, Value: %d\n", i, val)
}

上記のコードでは、for ループの範囲形式を使用して、スライス内の要素を反復処理します。このうち、i は要素のインデックスを表し、val は要素の値を表します。ご覧のとおり、range を使用すると、スライス内の要素をより簡単に走査できます。これは、golang で推奨される走査方法でもあります。

概要:

この記事では、golang でのスライスの定義と初期化、スライスへの要素の追加、スライスからの要素の削除、スライスのコピーとインターセプト、スライスの走査について紹介します。スライスは、配列操作を大幅に簡素化できる一般的なデータ構造です。したがって、Golang 開発者にとってスライスの使用法を習得することは非常に重要です。

以上がGolangでスライスを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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