Set 순회하기
Coddy GO 여정의 로직 & 흐름 섹션에 포함된 레슨 — 68개 중 36번째.
이제 세트에서 요소를 추가, 확인 및 제거할 수 있게 되었으므로, 모든 요소를 순회하는 방법을 배울 차례입니다. Go 세트는 맵을 기반으로 구축되었으므로, 익숙한 for...range 루프를 사용하여 각 요소에 접근할 수 있습니다.
Set을 반복하려면 Map을 반복할 때와 동일한 구문을 사용하지만, 키만 고려하면 됩니다:
for color := range colors {
fmt.Println(color)
}range 루프에서 하나의 변수만 사용하고 있다는 점에 유의하세요. 값(모두 빈 구조체임)은 필요하지 않으므로 완전히 무시할 수 있습니다. 이렇게 하면 세트의 각 색상이 한 줄에 하나씩 출력됩니다.
값을 무시한다는 것을 명시적으로 나타내고 싶다면 두 개의 변수 형식을 사용할 수도 있습니다:
for color, _ := range colors {
fmt.Println(color)
}Go의 맵(map)은 반복 시 특정 순서를 보장하지 않으므로, 프로그램을 실행할 때마다 세트(set) 요소가 다른 순서로 출력될 수 있다는 점을 유의하세요. 이는 세트의 지극히 정상적인 동작입니다. 세트는 순서 유지보다는 멤버십 테스트(요소 포함 여부 확인)를 위해 설계되었기 때문입니다.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
챌린지
쉬움Go의 세트(set) 관용구를 사용하여 노래 컬렉션을 처리하고 각 플레이리스트에 대한 상세 정보를 표시하는 음악 플레이리스트 분석기를 구축하세요. 이 챌린지는 세트를 반복(iterate)하여 그 내용을 검토하고 보고하는 방법을 보여줍니다.
두 개의 입력을 받게 됩니다:
- 쉼표로 구분된 록 노래가 포함된 문자열 (예:
"Bohemian Rhapsody,Stairway to Heaven,Hotel California,Sweet Child O Mine") - 쉼표로 구분된 팝 노래가 포함된 문자열 (예:
"Shape of You,Blinding Lights,Watermelon Sugar,Levitating")
당신의 과제는 다음과 같습니다:
- Go의 관용구인
map[string]struct{}를 사용하여 록 노래와 팝 노래를 별도로 저장할 두 개의 세트를 생성합니다. - 두 입력 문자열을 쉼표 기준으로 분할하여 개별 노래 제목을 파싱합니다.
- 빈 구조체 리터럴
{}을 값으로 사용하여 각 노래를 해당 세트에 추가합니다. - 록 플레이리스트 분석 내용을 표시합니다:
- 헤더:
"Rock Playlist Analysis:" - 개수:
"Total rock songs: [count]" - 노래 헤더:
"Songs in rock playlist:" - 각 노래를 별도의 줄에 표시:
"♪ [song_title]"
- 헤더:
- 팝 플레이리스트 분석 내용을 표시합니다:
- 헤더:
"Pop Playlist Analysis:" - 개수:
"Total pop songs: [count]" - 노래 헤더:
"Songs in pop playlist:" - 각 노래를 별도의 줄에 표시:
"♪ [song_title]"
- 헤더:
- 두 세트를 새로운 세트로 병합하여 통합 플레이리스트를 생성합니다.
- 통합 플레이리스트 분석 내용을 표시합니다:
- 헤더:
"Combined Playlist Analysis:" - 개수:
"Total unique songs: [count]" - 노래 헤더:
"All songs in combined playlist:" - 각 노래를 별도의 줄에 표시:
"♫ [song_title]"
- 헤더:
- 마지막으로 요약을 표시합니다:
"Playlist Summary:""Rock songs: [rock_count]""Pop songs: [pop_count]""Combined unique songs: [combined_count]"
strings 패키지를 사용하여 입력 문자열을 쉼표 기준으로 분할하세요. 각 세트를 반복하려면 단일 변수가 있는 for...range 루프를 사용하여 키(노래 제목)에만 접근하세요. 이 챌린지는 Go 세트를 반복하는 것이 컬렉션의 모든 요소를 검토할 수 있게 하여 분석 및 보고 작업에 어떻게 적합한지 보여줍니다.
치트 시트
Go에서 세트를 반복하려면, for...range 루프를 단일 변수와 함께 사용하여 키에만 접근하십시오:
for color := range colors {
fmt.Println(color)
}두 개의 변수 형식을 사용하고 명시적으로 값을 무시할 수도 있습니다:
for color, _ := range colors {
fmt.Println(color)
}Go의 맵은 반복할 때 특정 순서를 보장하지 않으므로, 프로그램을 실행할 때마다 세트 요소가 다른 순서로 나타날 수 있음에 유의하십시오.
직접 해보기
package main
import (
"bufio"
"fmt"
"os"
"sort"
"strings"
)
func main() {
// bufio.Scanner를 사용하여 전체 줄을 읽습니다 (공백이 포함된 노래 제목 처리)
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
rockSongs := scanner.Text()
scanner.Scan()
popSongs := scanner.Text()
// Go 관용구인 map[string]struct{}를 사용하여 세트를 생성합니다
rockSet := make(map[string]struct{})
popSet := make(map[string]struct{})
// 입력 문자열을 파싱하고 세트를 채웁니다
rockList := strings.Split(rockSongs, ",")
popList := strings.Split(popSongs, ",")
// TODO: 아래에 코드를 작성하세요
// 각 세트에 노래를 추가합니다
// 락 플레이리스트 분석 결과 표시 (일관된 출력을 위해 노래 정렬)
// 팝 플레이리스트 분석 결과 표시 (일관된 출력을 위해 노래 정렬)
// 결합된 플레이리스트 분석 결과 생성 및 표시 (일관된 출력을 위해 노래 정렬)
// 플레이리스트 요약 표시
// 기억하세요: 일관된 순서를 위해 맵 키를 슬라이스로 변환하고 정렬한 다음 반복하세요
_ = rockSet
_ = popSet
_ = rockList
_ = popList
_ = fmt.Sprintf
_ = sort.Strings
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.