В чем разница между словарем и массивом? - PullRequest
15 голосов
/ 23 февраля 2012

В чем разница между словарем и массивом, особенно при работе с файлами PLIST? Каковы преимущества использования одного над другим? Спасибо!

Ответы [ 6 ]

32 голосов
/ 23 февраля 2012

И NSDictionary, и NSArray являются классами коллекции, т. Е. Группируют вместе другие объекты.

NSArray - это «упорядоченная коллекция» - каждый элемент в коллекции имеет целочисленный индекс, поэтому существуетявный порядок предметов.Если вы поменяете местами порядок элементов в коллекции, то коллекция больше не будет «той же самой», поскольку порядок отличается.Объект может появляться в коллекции более одного раза.

NSSet - это «неупорядоченная коллекция» - каждый элемент появляется в сумке, порядок не имеет значения, и объект может существовать только один раз в сумке.

NSDictionary - это «индексированная коллекция» - каждый элемент в коллекции имеет ключ и может быть получен с помощью этого ключа.Объект может появляться более одного раза, при этом разные ключи могут указывать на один и тот же объект, но ключ может появляться только один раз.Словарь также является формой «хэш-таблицы», если у вас есть опыт работы в области компьютерных наук.

При синтаксическом анализе PLIST массивы и словари являются основными типами, с которыми вы имеете дело.Когда вы редактируете PLIST в XCode - если вы устанавливаете что-то в качестве типа Array, то все его дочерние элементы отображаются как «Item 0, Item 1, Item 2 ...», тогда как если вы устанавливаете его как тип Dictionary, то этодети являются ключом: пары значений.

Один из важных вариантов использования для типов различий заключается в следующем.

Представьте себе журнальное приложение, которое содержит несколько статей.Порядок статей важен, и поэтому вы должны хранить каждую статью в массиве.Если вы хотите изменить порядок статей, вы должны изменить порядок массива в списке.

Сами статьи могут быть представлены словарями, возможно, содержащими такие ключи, как "TextFile", "Background", "ArticleType".Вы используете словарь, потому что можете добавить дополнительную информацию в словарь в будущем, а механизм key: value делает ваш код понятным.

4 голосов
/ 23 февраля 2012

Основное различие заключается в том, как вы можете получить к ним доступ.

Как массивы, так и словари являются контейнерами и могут считываться последовательно (например, массивы можно перечислять с помощью индекса, а словари - с помощью ключа). Но в то время как массивы поддерживают порядок среди объектов, словари - нет.

Кроме того, со словарями у вас есть возможность получить доступ к определенному объекту с определенным ключом более удобным для пользователя способом (мнемоническим). Например, в словаре вы точно знаете, что с определенным ключом, скажем, «текст», связан определенный объект, скажем, NSString. То же самое может быть допустимо для массива, но с некоторыми трудностями. Например, как вы уверены, что в индексе 0 есть конкретный объект NSString?

О вашем вопросе и, насколько я знаю (начиная с Xcode 4), списки корневых объектов имеют словарь. Для получения дополнительной информации см. how-do-you-change-a-plists-root-object-type-to-nsarray-in-xcode-4 .

Надеюсь, это поможет.

4 голосов
/ 23 февраля 2012

Массив - это просто отсортированный список объектов. В словаре хранятся пары ключ-значение.

Например:

Array: obj1, obj2, ob3, ...

Словарь:

{

    @"Name": @"Bob"

    @"Age": 20 (but NSDictionary can only store objects, so that would be a NSNumber)

}

Нет никаких преимуществ или недостатков, это всего лишь две структуры данных, и вы используете ту, которая вам нужна.

2 голосов
/ 23 февраля 2012

Словари связывают ключ со значением (объектом) и не сохраняют порядок элементов. Доступ к массиву осуществляется по индексу - порядок сохраняется. PLIst добавить возможность использовать использовать XML для определения данных (ключ, пары значений).

0 голосов
/ 18 января 2013

NSDictionary полезен, когда вы хотите получить доступ к определенному значению ключа.NsArray полезен, когда вы хотите получить доступ к последовательным данным.

0 голосов
/ 23 февраля 2012

NSDictionary не сохраняет свои объекты 'value', но NSMutableArray сохраняет объекты, добавленные к нему.Для получения дополнительной информации NSDictionary и NSArray

...