2015-09-24 4 views
0

Я понимаю, что есть разница в том, как элементы сохранены в NSSet и NSDictionary, https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Collections/Collections.htmlИспользование NSSet против NSDictionary

Но с точки зрения развития, когда я должен использовать NSSet против NSDictionary? Сложность времени для обоих O (1)

Редактировать: Я столкнулся с вопросом - удалите дубликаты из массива. Одно решение хранило элементы в NSDictionary для удаления дубликатов, другое решение хранило элементы в NSSet.

мне было интересно, что было бы лучшим подходом

+6

У вас есть пары с ключом или нет? – Wain

+3

'NSSet' и' NSDictionary' очень разные. 'NSSet' - это набор элементов, когда' NSDictionary' будет хранить список пар 'Key-Values', вы можете получить доступ к' Value' непосредственно, когда у вас есть 'Key'. Логичнее сравнивать «NSSet» и «NSArray» с «NSSet» и «NSDictionary». – bsarr007

+0

@ bsarr007: Так как это ответ, а не комментарий, почему бы не превратить его в ответ? – gnasher729

ответ

3

принять некоторые рабочий код, используя NSDictionary. Затем замените NSDictionary на NSSet. Посмотрите, что произойдет. Просвещение должно следовать.

В чем заключается сложность времени, если она не работает?

+0

Я видел код, в котором NSDictionary может быть заменен на NSSet. Именно по этой причине я задал этот вопрос в первую очередь. e.g1 - код, который удаляет дубликаты, может быть использована любая коллекция e.g2 - код, который подсчитывает элементы в массиве, может быть сохранен как пары ключ-значение в словаре или в наборе NSCountedSet – Richa

4

NSSet и NSDictionary очень разные. NSSet - это набор элементов, между тем NSDictionary хранит список пар ключ-значение, поэтому вы можете получить доступ к Value непосредственно, когда у вас есть ключ. Более целесообразно сравнивать NSSet с NSArray, чем с NSDictionary.

+0

Я бы сказал, что это более целесообразно сравнивать 'NSArray' с' NSDictionary', потому что индексы массива схожи с ключами. Однако сравнение коллекций, которые полностью отличаются от доступа, можно сравнить только с подчеркиванием различий. –

+0

@ AminNegm-Awad Я согласен с вами, но это зависит от проблемы, которую вы хотите решить, вы можете использовать 'NSArray' (NSMutableArray) с или без доступа к индексу для элементов (например, containsObject, removeObject). Когда вы используете индексы, вы ближе к 'NSDictionary', когда вы этого не сделаете, вы ближе к' NSSet'. – bsarr007

+0

Верно, что классы Cocoa не все полностью представлены. Но я всегда предпочитаю «NSSet», если у меня нет индексированного доступа. –