复习:自定义排序
本课属于 Coddy Swift 学习旅程的“面向对象编程”单元。第 41 课,共 57 课。
挑战
困难一个音乐库使用标准协议对歌曲进行排序和去重。Song 包含 title、artist、year 和 rating(1-5)。让它根据 title 和 artist(忽略大小写)实现 Equatable 和 Hashable,也就是同一位艺人的同一首歌;按评分从高到低、年份从新到旧、标题按字母顺序实现 Comparable,并实现 CustomStringConvertible,格式为 Title - Artist (2019) ****,每个评分点对应一颗星。
完成 playlist(_:),使用 Set 删除重复歌曲(保留首次出现的歌曲),使用 sorted() 排序,并返回歌曲的描述,然后 duplicates removed: 1。
提供的代码会按 title,artist,year,rating 的行读取歌曲,并打印每个返回的行。
你的代码写在 Song.swift 和 Functions.swift 中。main.swift 包含提供的输入/输出代码,不能编辑。
亲手试试
// 提供的输入/输出代码:保持原样。
var input: [String] = []
while let line = readLine() { input.append(line) }
let songs = input.map { line -> Song in
let p = line.split(separator: ",").map(String.init)
return Song(title: p[0], artist: p[1], year: Int(p[2])!, rating: Int(p[3])!)
}
for line in playlist(songs) { print(line) }
面向对象编程中的所有课
自己练习: Swift 在线编辑器