Вот забавная цепочка сокращений и фильтров для символов строки.
func countRepeatDigitsIn(keyword : String) -> Int {
let total = Array(keyword.uppercased()).reduce(into: [Character : Int]()) { $0[$1, default: 0] += 1 }.filter { $0.value > 1 }.reduce(0) { $0 + $1.value }
return total
}
for text in ["HelloWorld", "Smart2000", "Smart@200@12"] {
print(text, countRepeatDigitsIn(keyword: text))
}
Первый reduce
создает словарь, в котором ключи - это символы, а значения - это количество символов.Затем фильтр удаляет символы, найденные только один раз.Второе уменьшение добавляет оставшиеся значения.