Go의 지도는 순서를 유지하지만 생각과는 다릅니다
Go에서 지도는 정렬되지 않은 데이터 구조입니다. 이는 맵에서 키-값 쌍의 순서가 일관성이 보장되지 않음을 의미합니다. 이는 특정 순서로 지도를 반복해야 할 때 문제가 될 수 있습니다.
다음 코드를 고려하세요.
package main import ( "fmt" ) func main() { months := map[int]string{ 1: "January", 2: "February", 3: "March", 4: "April", 5: "May", 6: "June", 7: "July", 8: "August", 9: "September", 10: "October", 11: "November", 12: "December", } for index, month := range months { fmt.Println(index, "-", month) } }
이 코드를 실행하면 다음과 같은 결과가 나올 것으로 예상할 수 있습니다. 1월부터 12월까지 순서대로 달이 됩니다. 그러나 실제로는 그런 일이 일어나지 않습니다. 대신에 월이 무작위 순서로 인쇄되는 것을 볼 수 있습니다.
왜 이런 일이 발생합니까?
그 이유는 Go 맵의 키가 정렬되지 않은 위치에 저장되기 때문입니다. 정렬. 맵을 반복하면 키가 배열에 저장된 순서대로 액세스됩니다.
해결책
키를 가져오는 몇 가지 방법이 있습니다. 이 문제에 대해. 한 가지 방법은 배열을 사용하여 키를 순서대로 저장하는 것입니다. 그런 다음 배열을 반복하여 원하는 순서로 맵의 요소에 액세스할 수 있습니다.
이 문제를 해결하는 또 다른 방법은 정렬된 맵을 사용하는 것입니다. 정렬된 맵은 키가 정렬된 순서로 저장되도록 보장하는 맵입니다. 이는 특정 순서로 지도를 반복해야 할 때 유용할 수 있습니다.
예
다음 코드는 배열을 사용하여 키를 저장하는 방법을 보여줍니다. order:
package main import ( "fmt" "sort" ) func main() { months := map[int]string{ 1: "January", 2: "February", 3: "March", 4: "April", 5: "May", 6: "June", 7: "July", 8: "August", 9: "September", 10: "October", 11: "November", 12: "December", } keys := []int{} for key := range months { keys = append(keys, key) } sort.Ints(keys) for _, key := range keys { fmt.Println(key, "-", months[key]) } }
이 코드를 실행하면 1월부터 1월까지의 달이 출력되는 것을 볼 수 있습니다. 12월.
위 내용은 Go Maps에 대해 순서화된 반복을 어떻게 보장할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!