对值分组
本课属于 Coddy Swift 学习旅程的“逻辑与流程”单元。第 16 课,共 56 课。
默认下标模式是两种常见形状的基础。
频率计数器:统计每个键出现的次数。
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: 值仅在键缺失时使用,随后右侧内容会就地修改该条目。
挑战
中等读取一行输入:一个由逗号分隔的单词列表。
按以下顺序输出:
- 输入中出现的每种单词长度各占一行,按从短到长排序,格式为
<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 在线编辑器