2 回答

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超13個(gè)贊
如果您只需要判斷是否存在重復(fù)值,而不需要知道哪些值是重復(fù)值或有多少個(gè)重復(fù)值,則用于跟蹤現(xiàn)有值的最有效結(jié)構(gòu)是具有空結(jié)構(gòu)值的映射。
(為了方便起見,粘貼在下面):
package main
import (
? ? "fmt"
)
func hasDupes(m map[string]string) bool {
? ? x := make(map[string]struct{})
? ? for _, v := range m {
? ? ? ? if _, has := x[v]; has {
? ? ? ? ? ? return true
? ? ? ? }
? ? ? ? x[v] = struct{}{}
? ? }
? ? return false
}
func main() {
? ? mapWithDupes := make(map[string]string)
? ? mapWithDupes["a"] = "one"
? ? mapWithDupes["b"] = "two"
? ? mapWithDupes["c"] = "one"
? ? fmt.Println(hasDupes(mapWithDupes)) // prints true
? ? mapWithoutDupes := make(map[string]string)
? ? mapWithoutDupes["a"] = "one"
? ? mapWithoutDupes["b"] = "two"
? ? mapWithoutDupes["c"] = "three"
? ? fmt.Println(hasDupes(mapWithoutDupes)) // prints false
}

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超3個(gè)贊
func main() {
m := map[int]int{
1: 100,
2: 200,
3: 100,
4: 400,
6: 200,
7: 700,
}
mNew := make(map[int]int)
for k, v := range m {
if val, has := mNew[v]; !has {
mNew[v] = k
} else {
fmt.Println(k, m[k], ",", val, m[val])
}
}
將映射鍵和值與新映射交換第二個(gè)映射不會(huì)插入重復(fù)鍵,因此您可以找到值
- 2 回答
- 0 關(guān)注
- 167 瀏覽
添加回答
舉報(bào)