Какие операции происходят быстро в NSSet и какие в NSArray?
Суть
Разница — в структуре данных, а не в «скорости перебора».
NSArray— упорядоченный список. Доступ по индексуobjectAtIndex:— O(1); перебор — O(n); поискcontainsObject:/indexOfObject:— O(n), потому что каждому элементу шлётсяisEqual:. Вставка/удаление в серединеNSMutableArray— O(n) (сдвиг элементов).NSSet— хеш-таблица без порядка и без дубликатов.containsObject:,addObject:,removeObject:— O(1) в среднем при корректныхhashиisEqual:. Перебор — тоже O(n), но порядок не гарантирован. Операции над множествами (intersectSet:,minusSet:,isSubsetOfSet:) — O(n).
Перебор массива обычно чуть быстрее на практике (элементы лежат подряд, cache locality), но асимптотически это одинаково, и интервьюер ждёт не этого, а «поиск в массиве линейный, в множестве — константный».
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep