range로 Go 언어의 맵을 순환하면 꺼낸 순서가 랜덤입니다

5518 단어 Gotech
Go 언어로 맵을 range로 순환하면 꺼낸 순서가 랜덤입니다

이루어지다


다음 코드를 실행하면 출력 값의 순서가 실행에 따라 달라집니다.
package main

import "fmt"

func main() {
	m := map[int]string{
		1: "value1",
		2: "value2",
		3: "value3",
	}

	for key, value := range m {
		fmt.Println(key, value)
	}
}
처음
2 value2
3 value3
1 value1
두번째
3 value3
1 value1
2 value2

왜 순서가 랜덤일까요?


낡은 언어 규범에는 매핑의 중복 순서가 정의되어 있지 않고 하드웨어 플랫폼 간에 실행 순서가 다르다.
반복 순서에 의존하면 이식성이 사라지기 때문에 랜덤성을 갖는다.
이것이 바로 이런 행위의 원인인 것 같다.
https://golang.org/doc/go1#iteration

순서를 정하고 싶을 때.


맵의 키를 슬라이스에 넣고 이를 기준으로 순환하면 맵의 순서를 고정시킬 수 있습니다.
package main

import (
	"fmt"
	"sort"
)

func main() {
	m := map[int]string{
		1: "value1",
		2: "value2",
		3: "value3",
	}
	var keys []int
	for k := range m {
		keys = append(keys, k)
	}
	sort.Ints(keys)
	for _, k := range keys {
		fmt.Println("Key:", k, "Value:", m[k])
	}
}
https://go.dev/blog/maps#iteration-order

좋은 웹페이지 즐겨찾기