2015-10-19 46 views
0

我想创建一个包含唯一字符串的数组。我怎样才能做到这一点?如何创建包含唯一字符串的数组?

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? 
} 

回答

5

如果你想要一个唯一元素的集合,那就是Set数据类型。 Go没有设置数据类型,但可以使用map[string]bool作为一个集合。

因此,不是切片的添加元素的map[string]bool作为具有true作为值的关键在于:

m := make(map[string]bool) 

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

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

exists := m["somevalue"] 

这利用了zero value,即如果在地图上还没有包含的元素,则返回值类型的零值,它是在false的情况下bool类型,正确指示该元素不在集合中。

地图中的元素没有固定顺序。如果您需要保留订单(例如广告订单),请使用切片(记住订单)和地图(以确定要添加的元素是否为新)。这是最简单的帮手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 
} 
+1

icza,谢谢你的回答和语法检查! 嗯,我明白了,我知道我需要在Go中看待Set数据类型。 你的源代码很清楚。这很容易理解。非常感谢你。 –

相关问题