Go 考虑到元素数量少于500,从字符串切片中删除Is比使用伪值的字符串映射更快
我将从一个框架中一个接一个地接收字符串,我需要将它们保存在某个容器中,然后删除其中的一些字符串。现在我有两个选择:-Go 考虑到元素数量少于500,从字符串切片中删除Is比使用伪值的字符串映射更快,go,slice,go-map,Go,Slice,Go Map,我将从一个框架中一个接一个地接收字符串,我需要将它们保存在某个容器中,然后删除其中的一些字符串。现在我有两个选择:- 创建一段字符串,然后通过查找删除一些项 创建一个key=string、data=dummy data的字符串映射,以便轻松删除 所以我个人更喜欢第二种选择。这是正确的选择吗?我们有更好的方法吗?如果您需要按值访问和删除字符串,那么map[string]struct{}将提供更好的性能,前提是字符串的数量足够大并且没有重复。如果存在重复项,并且删除时只需删除一个,则map[stri
所以我个人更喜欢第二种选择。这是正确的选择吗?我们有更好的方法吗?如果您需要按值访问和删除字符串,那么
map[string]struct{}
将提供更好的性能,前提是字符串的数量足够大并且没有重复。如果存在重复项,并且删除时只需删除一个,则map[string]int
将起作用,其值为字符串出现的次数。如果字符串的数量不多,那么容器/列表
可能比切片更有效,因为您可以在固定时间内从中删除字符串。只有在小尺寸的情况下,切片才会优于其他切片。在所有实际情况下,删除需要复制切片的一部分。使用map[string]bool以获得最佳的清晰度和速度。map[string]struct{}
通常优于map[string]bool
,因为它在语义上更正确。没有人会在阅读你的代码时疑惑“真/假是什么意思?”尽管有些人更喜欢bool
,因为它更容易打字。两种都可以<代码>结构{}的内存效率也稍微高一些。您要处理多少个字符串?如果小于10左右,一片就可以了。或者,即使它最多有几百个,如果删除的数量很少,一个切片也可以,特别是如果出于某种原因必须从映射转换回切片。