Интересно, каково решение метода NSDictionary allKeys, чтобы вернуть NSArray вместо NSSet, что будет иметь больше смысла, поскольку нет гарантии о порядке возвращаемого массива и, кроме того, ключ уникаленNSDictionary allKeys возвращает NSArray, а не NSSet
ответ
Ну как все это угадывание ...
Как сказал О.П., каждый ключ является уникальным. Для массива или набора данных код словаря должен собирать ключи - стоимость этого применяется к обоим. В заданном случае каждый ключ должен быть добавлен в набор, который включает (беспредметный, как выясняется) тест на членство, тогда как в случае массива не требуется тест на членство - стоимость добавления в массив должна быть меньше, чем добавление в набор. Побеждает Массив.
Ваше высказывание вставка NSSet потребует повторного поиска O (n)? Если бы яблоко так беспокоило производительность NSSet, почему бы им использовать его во многих случаях, но не в этом. –
Взгляд на исходный код показывает, что они используют таблицу хэш-таблицы O (1) для NSSet. Дублирующее разрешение не влияет. –
@JustinMeiners - я не упоминал O() ;-). Но вы говорите, что вы изучили источник или массив и установили и определили, что стоимость проверки равна нулю, и это не проверяет стоимость добавления элемент массива и набор равны? Но, если в коде нет комментариев, все здесь просто развлекаются, аргументы могут быть сделаны для любого выбора - и он может даже быть произвольным. – CRD
И, кроме того, что сказал Джастин, если вам действительно нужен список ключей словаря, вам нужно будет получить NSSet и затем преобразовать его в NSArray. Если вы просто хотите проверить существование ключа, OTOH, вы можете перейти непосредственно к словарю и не нуждаться в наборе.
- 1. Почему [NSDictionary allKeys] не возвращает набор?
- 2. Почему методы allKeys и allValues NSDictionary возвращают NSArray, а не NSSet?
- 3. NSDictionary allKeys order
- 4. NSDictionary allKeys, а затем отсортирован с помощью селектора vs keysSortedByValueUsingSelector
- 5. NSDictionary allKeys - всегда ли он возвращает тот же порядок?
- 6. NSUserDefaults возвращает NSDictionary вместо NSArray
- 7. Сортировка [NSDictionary allKeys] в алфавитном порядке
- 8. NSDictionary + NSArray + plist
- 9. NSDictionary allKeys and allValues изменения заказа
- 10. Использование NSSet против NSDictionary
- 11. Почему NSArray имеет метод indexOfObjectPassingTest, а не объектыPassingTest, например NSSet?
- 12. Преобразование NSDictionary в NSArray
- 13. NSDictionary AllKeys сбои - не могут понять отчет аварии обстоятельства
- 14. Ошибка NSRangeException ... NSDictionary, NSArray, UISearchBar
- 15. Что такое вычислительная сложность метода -allKeys NSDictionary?
- 16. Отображение списка NSArray изнутри NSDictionary?
- 17. NSArray NSDictionaries в NSDictionary NSArrays
- 18. JSONKit возвращает нежелательный NSCFString, а не NSDictionary
- 19. производительности для чтения из NSDictionary против NSArray
- 20. NSDictionary вдруг становится NSArray
- 21. NSDictionary в NSArray поиск
- 22. Фильтр NSDictionary из NSArray
- 23. Split NSArray на NSDictionary
- 24. NSArray NSDictionary - Возвращение NSDictionary при наличии только одного словаря в массиве, а не массива одного объекта
- 25. Создайте структурированный NSDictionary из NSArray
- 26. Как переименовать ключ в NSDictionary внутри NSArray
- 27. Retrieving NSArray Из NSDictionary
- 28. NSDictionary к NSArray
- 29. Keyless NSDictionary от NSArray
- 30. NSDictionary для NSArray?
Возражение; Спекуляция! –
Это не основано на мнениях, и существует множество прецедентов для подобных вопросов. –
Хотя есть прецедент для такого вопроса, вы не спрашиваете оригинальных разработчиков, и все ответы могут быть только предположениями. В этом отношении, это код NextStep, о котором вы спрашиваете. Ответ может быть «совместимость API с гораздо более ранним временем, чем вы думаете». –