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' にある削除された要素にアクセスしようとします。この問題に対処するには、次の効率的な削除手法のいずれかを使用することをお勧めします:
list = append(list[:i], list[i+1:]...)
list = list[:i]
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 サイトの他の関連記事を参照してください。