我有一个元素列表,我想按值删除其中一个元素。在Python中,这将是
l = ["apples", "oranges", "melon"]
l.remove("melon")
print(l) # ["apples", "orange"]
Go中的等价物是什么?我找到了slice trick来按索引删除元素,但它不是很易读,仍然需要我手动查找索引并且只适用于单个项目类型:
func remove(l []string, item string) {
for i, other := range l {
if other == item {
return append(l[:i], l[i+1:]...)
}
}
}
list.List
结构,但它不是通用的,因此需要使用大量的类型铸件。
从列表中删除元素的惯用方法是什么?
答案 0 :(得分:10)
从列表中删除元素的惯用方法是循环遍历它,就像在示例中一样。通过切片中的值删除元素在程序中不应该太常见,因为它是O(n)
操作,并且语言中有更好的数据结构。因此,Go不为切片提供内置的删除功能。
如果您发现自己经常使用按值删除,请考虑使用集合代替删除和添加元素O(1)
,同时仍可迭代。
set := map[string]bool{"apples":true, "oranges":true, "melon":true}
delete(set,"melon") // is O(1)