Golang 奇怪地缺乏集合資料結構
在Golang 中,對集合資料結構的基本需求導致了一個令人困惑的問題:為什麼不是原生提供的嗎?從 Google 頗具影響力的 Guava 庫中汲取靈感,為什麼 Golang 的設計者省略了對這樣一個基本結構的支持,迫使開發人員自己設計實現?
答案在於使用映射來建立集合的簡單性。如提供的程式碼片段中所示,可以利用地圖來建立集。可以輕鬆實現檢查是否存在、新增、刪除以及執行集合操作(並集、交集)等關鍵操作。
s := map[int]bool{5: true, 2: true} _, ok := s[6] // check for existence s[8] = true // add element delete(s, 2) // remove element // Union s_union := map[int]bool{} for k, _ := range s1{ s_union[k] = true } for k, _ := range s2{ s_union[k] = true } // Intersection s_intersection := map[int]bool{} if len(s1) > len(s2) { s1, s2 = s2, s1 // better to iterate over a shorter set } for k,_ := range s1 { if s2[k] { s_intersection[k] = true } }
雖然這些基於映射的實作足以滿足大多數實際場景,但有些人可能會認為本機集實作將簡化並增強程式碼可讀性。儘管如此,對於 Golang 開發人員來說,理解地圖作為集合的使用對於解決問題和高效資源利用至關重要。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3