Menu
CoddyTech

对值分组

本课属于 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: 值仅在键缺失时使用,随后右侧内容会就地修改该条目。

challenge icon

挑战

中等

读取一行输入:一个由逗号分隔的单词列表。

按以下顺序输出:

  1. 输入中出现的每种单词长度各占一行,按从短到长排序,格式为 <length>: <count>,其中 count 表示该长度的单词出现了多少次
  2. 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:按长度统计单词数量;排序后输出;输出出现次数最多的长度(次数相同时选较短的)
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: Swift 在线编辑器