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
}
- 1 回答
- 0 關注
- 196 瀏覽
添加回答
舉報