從循環內的切片中刪除元素
在使用範圍循環迭代切片時不可能從切片中刪除元素,因為切片內部工作的方式。但是,還有其他方法可以實現此目的:
使用手動循環並遞減索引
一種方法是使用帶有len() 函數的手動循環跟踪切片的長度。當刪除一個元素時,索引必須遞減以防止跳過下一個元素。例如:
for i := 0; i < len(a); i++ { if conditionMeets(a[i]) { a = append(a[:i], a[i+1:]...) i-- } }
使用向下循環
更好的選擇是使用向下循環以避免手動索引調整:
for i := len(a) - 1; i >= 0; i-- { if conditionMeets(a[i]) { a = append(a[:i], a[i+1:]...) } }
複製不可移除元素
對於需要移除大量元素的場景,將不可移除元素複製到新切片可能會更有效率:
b := make([]string, len(a)) copied := 0 for _, s := range(a) { if !conditionMeets(s) { b[copied] = s copied++ } } b = b[:copied]
就地移除
就地移除技術維護兩個索引並在同一切片內分配不可移除元素:
copied := 0 for i := 0; i < len(a); i++ { if !conditionMeets(a[i]) { a[copied] = a[i] copied++ } } for i := copied; i < len(a); i++ { a[i] = "" // Zero places of removed elements } a = a[:copied]
透過使用適當的方法,您可以有效地從循環內的切片中刪除元素,而不會遇到與因刪除而導致的元素移動相關的錯誤。
以上是在 Go 中迭代時如何安全地從切片中刪除元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!