如果要收集唯一元素,则为Set数据类型。Go没有集合数据类型,但是您可以使用
map[string]bool来充当集合。
对于“好的”集合,请使用具有
bool值类型(带有
true值)的映射并利用零值。对于内存占用最小的集合,请使用具有
struct{}值类型的映射,因为类型的值不struct{}占用内存;并使用逗号分隔的习惯用法来判断值是否在集合/映射中。这是set的“不错”版本的样子。代替切片,将元素添加到a
map[string]bool作为键,将a
true作为值:
m := make(map[string]bool)m["aaa"] = truem["bbb"] = truem["bbb"] = truem["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}


