>  기사  >  백엔드 개발  >  Go Maps에 대해 순서화된 반복을 어떻게 보장할 수 있나요?

Go Maps에 대해 순서화된 반복을 어떻게 보장할 수 있나요?

Susan Sarandon
Susan Sarandon원래의
2024-11-25 20:09:13837검색

How Can I Guarantee Ordered Iteration Over Go Maps?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.