在 Go 列表中按值删除元素

我有一个元素列表,我想按值删除其中一个。在 Python 中,这将是


l = ["apples", "oranges", "melon"]

l.remove("melon")

print(l) # ["apples", "orange"]

Go 中的等价物是什么?我发现了一个按索引删除元素的切片技巧,但它的可读性不是很好,仍然需要我手动查找索引并且仅适用于单个项目类型:


func remove(l []string, item string) {

    for i, other := range l {

        if other == item {

            return append(l[:i], l[i+1:]...)

        }

    }

}

有list.List结构,但它不是通用的,因此需要使用大量的类型转换。


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


隔江千里
浏览 390回答 1
1回答

慕田峪7331174

从列表中删除元素的惯用方法是像您在示例中所做的那样循环遍历它。从切片中按值删除元素在您的程序中不应该太常见,因为它是一种O(n)操作,并且语言中有更好的数据结构。因此,Go 没有为切片提供内置的删除功能。如果您发现自己经常使用按值移除,请考虑使用集合代替移除和添加元素O(1)同时仍可迭代。set := map[string]bool{"apples":true, "oranges":true, "melon":true}delete(set,"melon") // is O(1)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go