Как посчитать количество определенных значений в массиве?

xcode
ios
swift

#1

Я знаю что можно посчитать общее количество значений в массиве, но не совсем понял как посчитать количество определённых значений. Пример с массивами ниже. Как мне посчитать сколько двоек в массиве someArrayOfNumbers и сколько “a” в массиве someArrayOfStrings?

let someArrayOfNumbers = [1, 2, 2, 3, 9, 2]

let someArrayOfStrings = [“a”, “f”, “a”, “a”, “r”, “z”]


#2
print(someArrayOfNumbers.filter { $0 == 2 }.count)

с буквами аналогично


#3
let count = someArrayOfNumbers.reduce(into: 0) { if $1 == 2 { $0 += 1 } }
print(count)

#4

@haymob, я правильно понимаю, что при больших объёмах данных (например массив на 10000 элементов), reduce сработает в 2 раза быстрее, тк count перебирает массив по сути второй раз для подсчёта количества элементов? А в reduce мы это сделали за один проход, считая сумму при каждой итерации.


#5

Наверно нет)

count скорее всего уже сохранен, тоже на тоже выходит


#6

Count:

Complexity: O(1) if the collection conforms to RandomAccessCollection; otherwise, O(n), where n is the length of the collection.

Я помню, что в телеграмме многие говорили, что используют endIndex вместо count, стараясь избегать повторного прохождения по массиву.


#7

хм, интересно_______


#8

чел задавший вопрос уже в шоке наверное )) ему и первого ответа хватило бы


#9

Да нет, интересное развитие беседы)