package main
import "fmt"
func main(){
sample := map[string]string{
"key1":"value1",
"key2":"value2",
"key3":"value3",
}
for i := 0;i<3;i++{
fmt.Println(sample)
}
}
위의 코드는 map [string] 문자열을 세 번 인쇄합니다.인쇄 할 때 Go의 맵 반복 순서가 다른 이유는 무엇입니까?
나는 그것은 고정 된 출력에 기대하지만, 다음과 같은 보여줍니다
map[key3:value3 key2:value2 key1:value1]
map[key1:value1 key3:value3 key2:value2]
map[key2:value2 key1:value1 key3:value3]
그것은 다릅니다! 파이썬에서
동안 :
#!/bin/env python
#encoding=utf8
sample = {
"key1":"value1",
"key2":"value2",
"key3":"value3",
}
for i in range(3):
print sample
출력 :
{'key3': 'value3', 'key2': 'value2', 'key1': 'value1'}
{'key3': 'value3', 'key2': 'value2', 'key1': 'value1'}
{'key3': 'value3', 'key2': 'value2', 'key1': 'value1'}`
원칙적으로 주문은지도에서 보장되지 않으며 Python에서도 보장되지 않으므로지도의 콘텐츠를 인쇄 할 때 고정 출력을 기대해서는 안됩니다. 이것은 아마도 내부 구현 세부 사항 때문일 수 있습니다. 흥미로운 질문. –
@GiulioPiancastelli - 누군가가 Python 3.6의 첫 번째 릴리스 (예 : 지금)와 함께 제공되는 경우 : Python 3.6+ 키워드 인수 및 dicts는 삽입 순서 (참조 C 구현의 시작 부분)를 고려하므로 케이크를 보관할 수 있습니다. 그리고 그것을 너무 먹어 라 ;-) 파이썬 구현에서의 고정 된 순서는 단지 반 고정적이었다 (파이썬 v2에서 해시 충돌을 가진 키는 삽입 순서에 따라 다르게 배치되었다) ... – Dilettant