gpt4 book ai didi

arrays - 如何创建包含唯一字符串的数组?

转载 作者:IT王子 更新时间:2023-10-29 02:26:34 25 4
gpt4 key购买 nike

我想创建一个包含唯一字符串的数组。我该怎么做?

var paths = make([]string, 0)

func main() {
// Members are added dynamically
paths = append(paths, "aaa")
paths = append(paths, "bbb")
paths = append(paths, "bbb")
paths = append(paths, "ccc")

// convert ["aaa", "bbb", "bbb", "ccc"] -> ["aaa", "bbb", "ccc"]
// or can I use some class that disallow the same string automaticaly?
}

最佳答案

如果你想要一个独特元素的集合,那就是Set数据类型。 Go 没有内置的集合数据类型,但您可以使用映射作为集合:映射中的键必须是唯一的。

对于“nice”集,使用具有 bool 值类型(具有 true 值)的映射并利用 zero value .对于内存占用最小的集合,使用具有 struct{} 值类型的映射,因为 struct{} 类型的值不占用内存;并使用 comma-ok 习语来判断一个值是否在集合/映射中。

这是 set 的“漂亮”版本的样子。将您的元素添加到 map[string]bool 作为键而不是 slice ,以 true 作为值:

m := make(map[string]bool)

m["aaa"] = true
m["bbb"] = true
m["bbb"] = true
m["ccc"] = true

要检查一个元素是否已经在集合( map )中,您可以简单地使用 index expression :

exists := m["somevalue"]

这利用了 zero value ,也就是说,如果映射还不包含元素,则返回值类型的零值,在 bool 类型的情况下为 false,正确指示该元素不在集合中。

map 中的元素没有固定的顺序。如果您需要保持顺序(例如插入顺序),则使用 slice (记住顺序)和映射(判断要添加的元素是否是新元素)。使用辅助 add() 函数最简单:

var m = make(map[string]bool)
var a = []string{}

func main() {
add("aaa")
add("bbb")
add("bbb")
add("ccc")
}

func add(s string) {
if m[s] {
return // Already in the map
}
a = append(a, s)
m[s] = true
}

关于arrays - 如何创建包含唯一字符串的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33207197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com