0Pricing
Go Academy · 강의

반복과 순서

무작위 맵 순서 처리하기

반복과 순서은(는) CoddyKit의 무료 Go Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Go Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

맵 순회하기

range를 사용하여 맵을 순회하면서 각 키와 값을 가져옵니다.

package main

import "fmt"

func main() {
	m := map[string]int{"a": 1, "b": 2}
	for k, v := range m {
		fmt.Println(k, v)
	}
}

순서는 무작위입니다

맵 순회 순서는 보장되지 않습니다. Go는 순서를 의도적으로 무작위화합니다. 같은 순회문을 두 번 실행해도 키가 다른 순서로 출력될 수 있습니다.

무작위로 만드는 이유

Go는 개발자가 특정 순서에 실수로 의존하지 않도록 일부러 순서를 무작위화합니다. 맵 순서에 의존하는 코드는 언제든 문제가 될 수 있습니다.

키만 순회하기

값을 생략하면 키만 순회할 수 있습니다.

package main

import "fmt"

func main() {
	m := map[string]int{"a": 1, "b": 2, "c": 3}
	for k := range m {
		fmt.Println(k)
	}
}

키 수집하기

예측 가능한 결과를 얻으려면 먼저 키를 슬라이스에 수집하십시오.

package main

import "fmt"

func main() {
	m := map[string]int{"a": 1, "b": 2, "c": 3}
	keys := []string{}
	for k := range m {
		keys = append(keys, k)
	}
	fmt.Println("collected", len(keys), "keys")
}

키 정렬하기

수집한 키를 정렬한 다음 슬라이스를 순회하십시오. 그러면 순서가 정해진 일관된 출력이 생성됩니다.

package main

import (
	"fmt"
	"sort"
)

func main() {
	m := map[string]int{"c": 3, "a": 1, "b": 2}
	keys := []string{}
	for k := range m {
		keys = append(keys, k)
	}
	sort.Strings(keys)
	for _, k := range keys {
		fmt.Println(k, m[k])
	}
}

정렬된 출력 패턴

수집한 후 정렬하는 패턴은 맵을 예측 가능한 순서로 출력하는 표준적인 방법입니다. 출력 순서가 중요하다면 항상 키를 정렬하십시오.

정수 키 정렬하기

숫자 키에도 sort.Ints를 사용하여 같은 방법을 적용할 수 있습니다.

package main

import (
	"fmt"
	"sort"
)

func main() {
	m := map[int]string{3: "c", 1: "a", 2: "b"}
	keys := []int{}
	for k := range m {
		keys = append(keys, k)
	}
	sort.Ints(keys)
	for _, k := range keys {
		fmt.Println(k, m[k])
	}
}

순회 중 수정하기

range 순회문 중에 키를 안전하게 삭제할 수 있습니다. 하지만 순회 중에 키를 추가하면 동작이 정의되지 않습니다. 새 항목이 나타날 수도 있고 나타나지 않을 수도 있습니다.

package main

import "fmt"

func main() {
	m := map[string]int{"a": 1, "b": 2, "c": 3}
	for k := range m {
		if k == "b" {
			delete(m, k)
		}
	}
	fmt.Println(len(m))
}

값을 기준으로 정렬하기

키가 아니라 값을 기준으로 정렬하려면 키를 수집한 다음 맵의 값을 읽는 비교 함수로 정렬하십시오.

package main

import (
	"fmt"
	"sort"
)

func main() {
	m := map[string]int{"a": 3, "b": 1, "c": 2}
	keys := []string{}
	for k := range m {
		keys = append(keys, k)
	}
	sort.Slice(keys, func(i, j int) bool {
		return m[keys[i]] < m[keys[j]]
	})
	for _, k := range keys {
		fmt.Println(k, m[k])
	}
}

순서에 절대 의존하지 않기

핵심 내용은 맵 순회 순서를 절대 가정하지 않는 것입니다. 순서가 중요하다면 키를 슬라이스로 추출하고 명시적으로 정렬하십시오.

빠른 확인

맵의 항목을 키의 알파벳순으로 출력해야 합니다. 올바른 방법은 무엇입니까?

복습

순회와 순서:

  • 맵의 range 순서는 의도적으로 무작위입니다
  • 키를 수집하고 정렬한 다음 순회하여 일관된 출력을 만듭니다
  • range 중 삭제는 안전하지만 추가는 동작이 정의되지 않습니다

자주 묻는 질문

“반복과 순서” 강의는 무료인가요?

네 — “반복과 순서” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Go Academy 강의 전체를 잠금 해제할 수 있습니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“반복과 순서”에서 뭘 배우나요?

무작위 맵 순서 처리하기 브라우저에서 직접 실행하는 실습 코드로 Go Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Go Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Go Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“반복과 순서” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Go Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Go Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 맵 내부 구조
  2. 존재 여부 확인하기
  3. 집합으로 사용하는 맵
  4. 반복과 순서
← Go Academy(으)로 돌아가기