Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 考虑到元素数量少于500,从字符串切片中删除Is比使用伪值的字符串映射更快_Go_Slice_Go Map - Fatal编程技术网

Go 考虑到元素数量少于500,从字符串切片中删除Is比使用伪值的字符串映射更快

Go 考虑到元素数量少于500,从字符串切片中删除Is比使用伪值的字符串映射更快,go,slice,go-map,Go,Slice,Go Map,我将从一个框架中一个接一个地接收字符串,我需要将它们保存在某个容器中,然后删除其中的一些字符串。现在我有两个选择:- 创建一段字符串,然后通过查找删除一些项 创建一个key=string、data=dummy data的字符串映射,以便轻松删除 所以我个人更喜欢第二种选择。这是正确的选择吗?我们有更好的方法吗?如果您需要按值访问和删除字符串,那么map[string]struct{}将提供更好的性能,前提是字符串的数量足够大并且没有重复。如果存在重复项,并且删除时只需删除一个,则map[stri

我将从一个框架中一个接一个地接收字符串,我需要将它们保存在某个容器中,然后删除其中的一些字符串。现在我有两个选择:-

  • 创建一段字符串,然后通过查找删除一些项
  • 创建一个key=string、data=dummy data的字符串映射,以便轻松删除

  • 所以我个人更喜欢第二种选择。这是正确的选择吗?我们有更好的方法吗?

    如果您需要按值访问和删除字符串,那么
    map[string]struct{}
    将提供更好的性能,前提是字符串的数量足够大并且没有重复。如果存在重复项,并且删除时只需删除一个,则
    map[string]int
    将起作用,其值为字符串出现的次数。如果字符串的数量不多,那么
    容器/列表
    可能比切片更有效,因为您可以在固定时间内从中删除字符串。只有在小尺寸的情况下,切片才会优于其他切片。在所有实际情况下,删除需要复制切片的一部分。

    使用map[string]bool以获得最佳的清晰度和速度。
    map[string]struct{}
    通常优于
    map[string]bool
    ,因为它在语义上更正确。没有人会在阅读你的代码时疑惑“真/假是什么意思?”尽管有些人更喜欢
    bool
    ,因为它更容易打字。两种都可以<代码>结构{}的内存效率也稍微高一些。您要处理多少个字符串?如果小于10左右,一片就可以了。或者,即使它最多有几百个,如果删除的数量很少,一个切片也可以,特别是如果出于某种原因必须从映射转换回切片。