亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何創建包含唯一字符串的數組?

如何創建包含唯一字符串的數組?

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 關注
  • 196 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號