为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕娘9325324 2021-11-15 17:15:09
我想创建一个包含唯一字符串的数组。我怎样才能做到这一点?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?}
查看完整描述

1 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

如果你想要一个唯一元素的集合,那就是Set数据类型。Go 没有集合数据类型,但您可以使用 amap[string]bool充当集合。


对于“不错”的集合,使用具有bool值类型(带true值)的映射并利用零值。对于内存占用最小的集合,使用struct{}值类型的映射,因为类型的值不struct{}占用内存;并使用逗号确定成语来判断一个值是否在集合/映射中。


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


m := make(map[string]bool)


m["aaa"] = true

m["bbb"] = true

m["bbb"] = true

m["ccc"] = true

要检查元素是否已经在集合(地图)中,您可以简单地使用索引表达式:


exists := m["somevalue"]

这利用了零值,即如果映射尚未包含元素,则返回值类型的零值,这是false在booltype 的情况下,正确指示该元素不在集合中。


地图中的元素没有固定的顺序。如果需要保持顺序(例如插入顺序),则使用切片(记住顺序)和映射(判断要添加的元素是否是新元素)。这是使用辅助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

}


查看完整回答
反对 回复 2021-11-15
  • 1 回答
  • 0 关注
  • 150 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信