값 그룹화하기
Coddy Swift 여정의 로직 및 흐름 섹션에 포함된 레슨. 56개 중 16번째.
default-subscript 패턴은 일상적으로 사용되는 두 가지 형태의 기반입니다.
빈도 카운터: 각 키가 나타나는 횟수를 셉니다.
let letters = ["a", "b", "a", "c", "a"]
var counts: [String: Int] = [:]
for letter in letters {
counts[letter, default: 0] += 1
}
// counts == ["a": 3, "b": 1, "c": 1]버킷팅: 파생된 키 아래에 값을 수집합니다:
let words = ["hi", "hello", "yo", "hey"]
var byLength: [Int: [String]] = [:]
for w in words {
byLength[w.count, default: []].append(w)
}
// [2: ["hi", "yo"], 5: ["hello"], 3: ["hey"]]버킷팅 경우의 default는 빈 배열입니다. default: 값은 키가 누락된 경우에만 사용되며, 그러면 오른쪽 항이 항목을 제자리에서 변경합니다.
챌린지
중급입력 한 줄을 읽습니다. 입력은 쉼표로 구분된 단어 목록입니다.
다음 순서로 출력합니다.
- 입력에 나타나는 각 단어 길이마다 한 줄씩 출력합니다. 가장 짧은 길이부터 가장 긴 길이 순으로 정렬하며, 형식은
<length>: <count>입니다. 여기서count는 해당 길이의 단어가 몇 개 나타났는지를 의미합니다. Most common length: <n>을 출력합니다. 여기서n은 개수가 가장 많은 길이입니다. 개수가 같으면 더 짧은 길이를 선택합니다.
입력이 hi,hello,yo,hey,bonjour,bye인 경우 출력은 다음과 같습니다.
2: 2
3: 2
5: 1
7: 1
Most common length: 2길이 2와 3은 모두 두 번씩 나타납니다. 더 짧은 길이를 선택하므로 2가 선택됩니다.
직접 해보기
let words = readLine()!.components(separatedBy: ",")
// TODO: 길이별 단어 수 세기; 정렬하여 출력; 가장 흔한 것 출력 (동점: 더 짧은 것)
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
로직 및 흐름의 모든 레슨
직접 연습해 보세요: Swift 플레이그라운드