golang mapキー値交換

1829 ワード

mapキー値交換
まず考えられる方法は,元のmapのkeyをvalueとし,元のmap valueをkeyとする別のmapを構築し,その後for-rangeで元のmapを遍歴して新しいmapを導入することである.
v 1版
var (
    o = map[string]int{"a": 0, "b": 0, "c": 2}
)

func main() {

    fmt.Println(o)

    n := map[int]string{}
    for k, v := range o {
        n[v] = k
    }
    fmt.Println(n)
}

しかし、上記のコードには大きな問題があり、元のmapの値が一意でないと、新しいmapが元のmapのキー値ペアを完全に含むことができなくなります.この問題は多値mapで解決できる.
v 2版
var (
    o = map[string]int{"a": 0, "b": 0, "c": 2}
)

func main() {

    fmt.Println(o)

    n := map[int][]string{}
    for k, v := range o {
        n[v] = append(n[v], k)
    }
    fmt.Println(n)
}