Go言語でスライスに要素を追加する方法

青灯夜游
リリース: 2023-01-10 14:06:12
オリジナル
3183 人が閲覧しました

Go 言語では、append() を使用して要素をスライスに動的に追加できます。 append() は、1 つの要素、複数の要素、または新しいスライスをスライスに追加できます。構文は、「append(slice, element 1, element 2...)」または「append(slice, new slides...)」です。 。 append() 関数を使用して要素をスライスに動的に追加する場合、十分な要素を収容するのに十分なスペースがない場合、スライスは「拡張」され、新しいスライスの長さが変更されます。

Go言語でスライスに要素を追加する方法

このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。

Go 言語では、append() を使用して要素をスライスに動的に追加できます。

Go 言語の append() 関数

append は、1 つの要素、複数の要素、および新しいスライスをスライスに追加できます

var a []int
a = append(a, 1) // 追加1个元素
a = append(a, 1, 2, 3) // 追加多个元素, 手写解包方式
a = append(a, []int{1,2,3}...) // 追加一个切片, 切片需要解包
ログイン後にコピー

ただし、append() 関数を使用して要素をスライスに動的に追加する場合、十分な要素を収容するのに十分なスペースがない場合、スライスは「拡張」されることに注意してください。新しいスライスの長さ 変更が発生します。

スライスが拡張されるとき、容量拡張ルールは 1、2、4、8、16... のように容量の 2 倍に拡張されます。コードは次のとおりです。

var numbers []int


for i := 0; i < 10; i++ {
    numbers = append(numbers, i)
    fmt.Printf("len: %d  cap: %d pointer: %p\n", len(numbers), cap(numbers), numbers)
}
ログイン後にコピー

コード出力は次のとおりです。

Go言語でスライスに要素を追加する方法

コードの説明は次のとおりです。

  • 1 行目は整数スライスを宣言します。 。

  • #4 行目、ループは数値スライスに 10 個の数値を追加します。

  • 行 5、スライスの長さ、容量、ポインターの変更を出力し、関数 len() を使用してスライスに含まれる要素の数を表示し、関数 cap( ) スライスの容量を表示します。

コード出力を見ると、スライス長 len がスライス容量の上限と等しくないという興味深いルールが見つかります。

スライスに要素を継続的に追加するプロセスは、会社の移転に似ています。会社の発展の初期には、資金が厳しく、従業員も少なかったため、すべてを収容するには小さな部屋しか必要ありませんでした。事業が成長するにつれて、事業の拡大と収入の増加にはワークステーションの拡張が必要ですが、オフィススペースのサイズは固定されており、変更することはできません。新しいオフィスの場所に移転する必要がある。

  • 従業員とワークステーションはスライス内の要素です。

  • #オフィスは割り当てられたメモリです。
  • 移動とは、メモリの再割り当てを意味します。
  • 何度移動しても会社名は変わりませんし、外部スライスを表す変数名も変わりません。
  • 移動後はアドレスが変わるため、メモリの「アドレス」も変更されます。
  • スライスの最後に追加するだけでなく、スライスの先頭に要素を追加することもできます。
var a = []int{1,2,3}
a = append([]int{0}, a...) // 在开头添加1个元素
a = append([]int{-3,-2,-1}, a...) // 在开头添加1个切片
ログイン後にコピー

スライスの先頭に要素を追加する一般に、メモリの再割り当てが発生し、既存の要素がすべて 1 回コピーされるため、スライスの先頭から要素を追加するパフォーマンスは、末尾から要素を追加するよりもはるかに悪くなります。

追加関数は新しいスライスの特性を返すため、スライスはチェーン操作もサポートしています。複数の追加操作を組み合わせて、スライスの中央に要素を挿入できます:

var a []int
a = append(a[:i], append([]int{x}, a[i:]...)...) // 在第i个位置插入x
a = append(a[:i], append([]int{1,2,3}, a[i:]...)...) // 在第i个位置插入切片
ログイン後にコピー

各追加操作の 2 番目の追加呼び出しでは、一時スライスを作成し、a[i:] の内容を新しく作成したスライスにコピーしてから、一時的に作成したスライスを a[:i] に追加します。

【関連する推奨事項:

Go ビデオ チュートリアル

プログラミング教育

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
関連するチュートリアル
人気のおすすめ
最新のコース
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート