1. ホーム
  2. go

[解決済み] マップを含む値を順番に収集する

2022-11-14 16:04:31

質問

トピック関数によって返されたマップをコード内で反復処理するとき、キーが順番に表示されません。

どうすれば、キーが順番になるようにする/キーが順番になり、値が対応するようにマップを並べ替えることができますか?

以下は のコードです。 .

どのように解決するのですか?

この 囲碁ブログ 囲碁マップの活用 には素晴らしい説明があります。

<ブロッククオート

範囲ループでマップを反復する場合、反復順序は指定されません。 指定されないため、ある反復から次の反復まで同じであることは保証されません。 であることは保証されません。Go 1 以降、ランタイムはマップの反復順序をランダム化するようになりました。 プログラマは以前の実装の安定した反復順序に頼ったためです。 というのも、プログラマは以前の実装の安定した反復順序に依存していたからです。安定した反復順序が必要な場合は、以下を行う必要があります。 その順序を指定する別のデータ構造を維持する必要があります。

以下は私が修正したサンプルコードです。 http://play.golang.org/p/dvqcGPYy3-

package main

import (
    "fmt"
    "sort"
)

func main() {
    // To create a map as input
    m := make(map[int]string)
    m[1] = "a"
    m[2] = "c"
    m[0] = "b"

    // To store the keys in slice in sorted order
    keys := make([]int, len(m))
    i := 0
    for k := range m {
        keys[i] = k
        i++
    }
    sort.Ints(keys)

    // To perform the opertion you want
    for _, k := range keys {
        fmt.Println("Key:", k, "Value:", m[k])
    }
}

出力します。

Key: 0 Value: b
Key: 1 Value: a
Key: 2 Value: c