2013-07-30 3 views
6

Интересно, каково решение метода NSDictionary allKeys, чтобы вернуть NSArray вместо NSSet, что будет иметь больше смысла, поскольку нет гарантии о порядке возвращаемого массива и, кроме того, ключ уникаленNSDictionary allKeys возвращает NSArray, а не NSSet

+2

Возражение; Спекуляция! –

+0

Это не основано на мнениях, и существует множество прецедентов для подобных вопросов. –

+1

Хотя есть прецедент для такого вопроса, вы не спрашиваете оригинальных разработчиков, и все ответы могут быть только предположениями. В этом отношении, это код NextStep, о котором вы спрашиваете. Ответ может быть «совместимость API с гораздо более ранним временем, чем вы думаете». –

ответ

1

Ну как все это угадывание ...

Как сказал О.П., каждый ключ является уникальным. Для массива или набора данных код словаря должен собирать ключи - стоимость этого применяется к обоим. В заданном случае каждый ключ должен быть добавлен в набор, который включает (беспредметный, как выясняется) тест на членство, тогда как в случае массива не требуется тест на членство - стоимость добавления в массив должна быть меньше, чем добавление в набор. Побеждает Массив.

+0

Ваше высказывание вставка NSSet потребует повторного поиска O (n)? Если бы яблоко так беспокоило производительность NSSet, почему бы им использовать его во многих случаях, но не в этом. –

+0

Взгляд на исходный код показывает, что они используют таблицу хэш-таблицы O (1) для NSSet. Дублирующее разрешение не влияет. –

+0

@JustinMeiners - я не упоминал O() ;-). Но вы говорите, что вы изучили источник или массив и установили и определили, что стоимость проверки равна нулю, и это не проверяет стоимость добавления элемент массива и набор равны? Но, если в коде нет комментариев, все здесь просто развлекаются, аргументы могут быть сделаны для любого выбора - и он может даже быть произвольным. – CRD

1

И, кроме того, что сказал Джастин, если вам действительно нужен список ключей словаря, вам нужно будет получить NSSet и затем преобразовать его в NSArray. Если вы просто хотите проверить существование ключа, OTOH, вы можете перейти непосредственно к словарю и не нуждаться в наборе.

Смежные вопросы