> 백엔드 개발 > Golang > Go 맵을 반복할 때 순서 있는 출력을 보장하는 방법은 무엇입니까?

Go 맵을 반복할 때 순서 있는 출력을 보장하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-28 01:16:15
원래의
639명이 탐색했습니다.

How to Guarantee Ordered Output When Iterating Over Go Maps?

Go의 지도: 순서 유지 및 요소 액세스

Go에서 지도는 키-값 쌍을 저장하는 동적이고 효율적인 방법을 제공합니다. 그러나 배열이나 슬라이스와 달리 맵은 본질적으로 정렬되지 않습니다. 이로 인해 반복할 때 순서가 잘못된 출력이 나타날 수 있습니다.

다음 코드 조각은 이 동작을 보여줍니다.

package main

import (
    "fmt"
)

type monthsType struct {
    no   int
    text string
}

var months = map[int]string{
    1:"January", 2:"Fabruary", 3:"March", 4:"April", 5:"May", 6:"June",
    7:"July", 8:"August", 9:"September", 10:"October", 11:"Novenber", 12:"December",
}

func main(){
    for no, month := range months {
        fmt.Print(no)
        fmt.Println("-" + month)
    }
}
로그인 후 복사

이 코드를 실행하면 지도가 키 순서(1~12번)로 인쇄되지 않습니다. 대신 무작위 순서로 인쇄됩니다.

해결책: 지도의 순서 제어

지도를 특정 순서로 인쇄하려면 몇 가지 옵션이 있습니다. 다음을 고려할 수 있습니다:

1. 배열 사용:
순서가 중요한 경우 배열을 사용하여 요소를 순차적으로 저장할 수 있습니다. 배열은 인덱스를 사용하여 요소에 직접 액세스할 수 있는 정렬된 데이터 구조를 제공합니다.

2. 키 정렬:
맵을 데이터 구조로 유지해야 하는 경우 sort.Ints 함수를 사용하여 정렬된 키 목록을 얻고, 정렬된 키를 반복하고, 맵에서 해당 값을 검색할 수 있습니다. .

예제 코드:

package main

import (
    "fmt"
    "sort"
)

type monthsType struct {
    no   int
    text string
}

var months = map[int]string{
    1:"January", 2:"Fabruary", 3:"March", 4:"April", 5:"May", 6:"June",
    7:"July", 8:"August", 9:"September", 10:"October", 11:"Novenber", 12:"December",
}

func main(){
    var sortedKeys []int
    for key := range months {
        sortedKeys = append(sortedKeys, key)
    }
    sort.Ints(sortedKeys)

    fmt.Println("Printing in order:")
    for _, key := range sortedKeys {
        fmt.Printf("%d-%s", key, months[key])
    }
}
로그인 후 복사

이 코드에서 sortedKeys 배열은 맵의 키를 오름차순으로 저장하기 위해 생성됩니다. 그런 다음 정렬된 키를 반복하고 맵에서 해당 값에 액세스합니다. 그러면 다음과 같은 출력이 생성됩니다.

Printing in order:
1-January2-Fabruary3-March4-April5-May6-June7-July8-August9-September10-October11-Novenber12-December
로그인 후 복사

위 내용은 Go 맵을 반복할 때 순서 있는 출력을 보장하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿