Go マップの順序が狂って印刷される
Go では、キーと値のペアを非形式で維持するハッシュ テーブルを使用してマップが実装されます。 -オーダーファッション。その結果、マップを反復処理しても、キーまたは値が返される順序は保証されません。
マップの印刷順序が狂っているのはなぜですか?
提供されたコードでは、マップの月は、月番号と対応する名前を表すキーと値のペアで定義されます。範囲を使用してマップを反復処理する場合、印刷出力の順序はハッシュ テーブルの内部実装に基づきます。これは通常、順序ではなくパフォーマンスのために最適化されます。
順序を修正する方法
マップの反復順序を保証するには、いくつかの方法があります。
1.順序付きマップを使用する:
Go には組み込みの順序付きマップ タイプがありませんが、この機能を提供するサードパーティ ライブラリがあります。そのようなライブラリの 1 つは、「github.com/golang/collections#OrderedMap」です。
import "github.com/golang/collections#OrderedMap" func main() { m := collections.NewOrderedMap() m.Set(1, "January") // ... for _, month := range m.Keys() { fmt.Println(month, "-", m.Get(month)) } }
2.マップ キーを並べ替えます:
別のオプションは、マップからキーを取得して並べ替え、並べ替えたキーを反復処理して値に順番にアクセスすることです。
func main() { keys := make([]int, 0, len(months)) for k := range months { keys = append(keys, k) } sort.Ints(keys) for _, k := range keys { fmt.Println(k, "-", months[k]) } }
以上がGo マップの反復に順序がないのはなぜですか? 順序を保証するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。