값 그룹화하기
Coddy Swift 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 16번째.
기본 첨자 패턴은 두 가지 일상적인 모양의 기초가 됩니다.
빈도 카운터: 각 키가 몇 번 나타나는지 셉니다.
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]버케팅(Bucketing): 파생된 키를 기준으로 값을 수집합니다:
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"]]버케팅(bucketing) 사례의 기본값은 빈 배열입니다. default: 값은 키가 누락된 경우에만 사용되며, 이후 우변(right-hand side)이 해당 항목을 즉석에서 수정합니다.
챌린지
중급입력으로 쉼표로 구분된 단어 목록이 포함된 한 줄을 읽습니다.
다음 순서대로 출력하세요:
- 입력에 나타나는 각 단어 길이별로 한 줄씩, 짧은 것부터 긴 것 순으로 정렬하여
<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가 선택됩니다.)
치트 시트
빈도 카운터(Frequency counter) – default: 0을 사용하여 각 키의 발생 횟수를 계산합니다:
var counts: [String: Int] = [:]
for letter in letters {
counts[letter, default: 0] += 1
}버케팅(Bucketing) – default: []를 사용하여 파생된 키 아래에 값을 그룹화합니다:
var byLength: [Int: [String]] = [:]
for w in words {
byLength[w.count, default: []].append(w)
}default: 값은 키가 없을 때만 사용되며, 그 결과는 해당 위치에서 즉시 수정됩니다.
직접 해보기
let words = readLine()!.components(separatedBy: ",")
// TODO: 길이별 단어 수 세기; 정렬하여 출력; 가장 빈번한 단어 출력 (동률일 경우: 더 짧은 것)
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.