在Go列表中按值删除元素

时间:2015-06-26 18:55:32

标签: list go slice

我有一个元素列表,我想按值删除其中一个元素。在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结构,但它不是通用的,因此需要使用大量的类型铸件。

从列表中删除元素的惯用方法是什么?

1 个答案:

答案 0 :(得分:10)

从列表中删除元素的惯用方法是循环遍历它,就像在示例中一样。通过切片中的值删除元素在程序中不应该太常见,因为它是O(n)操作,并且语言中有更好的数据结构。因此,Go不为切片提供内置的删除功能。

如果您发现自己经常使用按值删除,请考虑使用集合代替删除和添加元素O(1),同时仍可迭代。

set := map[string]bool{"apples":true, "oranges":true, "melon":true}
delete(set,"melon") // is O(1)