Использование reduce(into:_:)
:
var playerNames = ["Harry", "Ron", "Hermione"]
let playerScore = playerNames.reduce(into: [:]) { counts, playerNames in
counts[playerNames, default: 0] += 0
}
print(playerScore)
Для подсчета имен игроков (например, дубликаты имен):
counts[myArray, default: 0] += 1
Так, например, если бы у Рона было две записи до начала игры (счет> 0), то вы бы знали.
Без использования метода reduce(into:_:)
и в качестве расширения:
var playerNames = ["Harry", "Ron", "Hermione"]
extension Sequence where Self.Iterator.Element: Hashable {
func freq() -> [Self.Iterator.Element: Int] {
return reduce([:]) {
( iter: [Self.Iterator.Element: Int], element) in
var dict = iter
dict[element] = 0
return dict
}
}
}
print(playerNames.freq())
// ["Harry": 0, "Hermione": 0, "Ron": 0]
вести подсчет (например, повторяющиеся имена):
dict[element, default: -1 ] += 1