配列から Dictionary に
重複が無いことが保証されてるなら
swift
let dictUnique = Dictionary(uniqueKeysWithValues: books.map { ($0.title, $0) })
重複あり得るなら
swift
// 後勝ち
let dictLastWins = Dictionary(books.map { ($0.title, $0) }, uniquingKeysWith: { _, new in new })
// 先勝ち
let dictFirstWins = Dictionary(books.map { ($0.title, $0) }, uniquingKeysWith: { first, _ in first })
for で回しても良いんだけど、こっちのほうが速い(試したデータだと半分ぐらい)
ちなみに配列にする場合(重複したら複数入る)
swift
let dictGrouped = Dictionary(grouping: books, by: \.title)