ホームページ  >  記事  >  バックエンド開発  >  Go言語でスライスから要素を削除する方法

Go言語でスライスから要素を削除する方法

青灯夜游
青灯夜游オリジナル
2021-06-07 14:49:394957ブラウズ

削除方法: 1. "slice object [N:]" ステートメントを使用して最初の N 要素を削除します; 2. "append(slice object[:i], slide object[i N:]. . .)" ステートメントを使用して、中央の N 要素を削除します。 3. "slice object [:len(slice object)-N]" ステートメントを使用して、最後の N 要素を削除します。

Go言語でスライスから要素を削除する方法

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

Go 言語はスライスから要素を削除します

Go 言語はスライス要素を削除するための特別な構文やインターフェイスを提供しません。削除するにはスライス自体の特性を使用する必要があります。削除する要素の位置により先頭から削除、途中から削除、末尾から削除の3通りがあり、このうちスライスの最後尾の要素を削除するのが最も速いです。

先頭から削除

先頭要素を削除すると、データ ポインタを直接移動できます:

a = []int{1, 2, 3}
a = a[1:] // 删除开头1个元素
a = a[N:] // 删除开头N个元素

データ ポインタを移動しないこともできますが、次の要素を移動します。 データを先頭に移動するには、追加を使用してその場で完了します (いわゆるその場で完了とは、元のスライス データに対応するメモリ間隔で完了し、データに変更が生じないことを意味します)メモリ空間構造):

a = []int{1, 2, 3}
a = append(a[:0], a[1:]...) // 删除开头1个元素
a = append(a[:0], a[N:]...) // 删除开头N个元素

先頭要素を削除するために copy() 関数を使用することもできます:

a = []int{1, 2, 3}
a = a[:copy(a, a[1:])] // 删除开头1个元素
a = a[:copy(a, a[N:])] // 删除开头N个元素

中間位置から削除

#中央の要素を削除するには、残りの要素を同様に全体的に移動する必要があります。追加またはコピーでその場で完了できます:

a = []int{1, 2, 3, ...}
a = append(a[:i], a[i+1:]...) // 删除中间1个元素
a = append(a[:i], a[i+N:]...) // 删除中间N个元素
a = a[:i+copy(a[i:], a[i+1:])] // 删除中间1个元素
a = a[:i+copy(a[i:], a[i+N:])] // 删除中间N个元素

末尾から削除

a = []int{1, 2, 3}
a = a[:len(a)-1] // 删除尾部1个元素
a = a[:len(a)-N] // 删除尾部N个元素

先頭の要素を削除し、末尾の要素を削除することは、中間の要素を削除することとみなすことができます。特殊な場合については、例を見てみましょう。

[例] スライスの指定位置の要素を削除します。

package main
import "fmt"
func main() {
    seq := []string{"a", "b", "c", "d", "e"}
    // 指定删除位置
    index := 2
    // 查看删除位置之前的元素和之后的元素
    fmt.Println(seq[:index], seq[index+1:])
    // 将删除点前后的元素连接起来
    seq = append(seq[:index], seq[index+1:]...)
    fmt.Println(seq)
}

コード出力結果:

[a b] [d e]
[a b d e]

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

  • 行 1 は整数スライスを宣言し、A を保存しますa から e までの文字列。

  • 行 4 では、デモンストレーションと説明の便宜上、インデックス変数を使用して、削除する必要がある要素の位置を保存します。

  • 7 行目、seq[:index] は削除された要素の前半を表し、値は [1 2]、seq[index 1:] は削除された要素を表します 後半の値は [4 5] です。

  • 10 行目では、append() 関数を使用して 2 つのスライスを接続します。

  • 12行目は接続された新しいスライスを出力していますが、この時点でインデックス2の要素は削除されています。

Go 言語におけるスライス要素の削除の本質は、削除された要素を分割点として使用して、前後 2 つの部分のメモリを再接続することです。

推奨学習:

Golang チュートリアル

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

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