ホームページ > バックエンド開発 > Golang > Go で構造体配列から要素を効率的に削除するにはどうすればよいですか?

Go で構造体配列から要素を効率的に削除するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-07 21:12:13
オリジナル
455 人が閲覧しました

How to Efficiently Delete Elements from Struct Arrays in Go?

Golang の構造体配列からの要素の効率的な削除

構造体の配列を操作する際、条件に基づいて特定の要素を削除することが必要になることがよくあります。 。次のコードは、「config.Applications」という配列からインデックス「i」の要素を削除しようとしたときに発生した問題を示しています。

type Config struct {
  Applications []Application
}

config = new(Config)
_ = decoder.Decode(&config)

for i, application := range config.Applications {
  if i == 1 {
    config.Applications = _removeApplication(i, config.Applications)
  }
}

func _removeApplication(i int, list []Application) []Application {
  if i < len(list)-1 {
    list = append(list[:i], list[i+1:]...)
  } else {
    log.Print(list[i].Name)
    list = list[:i]
  }
  return list
}
ログイン後にコピー

このコードでは、「範囲外」エラーが発生します。 for ループは依然としてインデックス 'i' にある削除された要素にアクセスしようとします。この問題に対処するには、次の効率的な削除手法のいずれかを使用することをお勧めします:

  1. 要素を中間から削除:
list = append(list[:i], list[i+1:]...)
ログイン後にコピー
  1. 最後の削除element:
list = list[:i]
ログイン後にコピー
  1. スライス トリックを使用した要素の削除:
list = list[:i+copy(list[i:], list[i+1:])]
ログイン後にコピー

削除時の注意点現在ループしている配列の要素を使用する場合は、潜在的なインデックスを避けるために下向きループを使用するのが最善です問題:

for i := len(config.Applications) - 1; i >= 0; i-- {
  application := config.Applications[i]
  // Condition to decide if current element has to be deleted:
  if haveToDelete {
    config.Applications = append(config.Applications[:i], config.Applications[i+1:]...)
  }
}
ログイン後にコピー

以上がGo で構造体配列から要素を効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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