В чем разница между словарем и массивом?

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

6 ответов


и NSDictionary и NSArray классы коллекций, т. е. группировать другие объекты.

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

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

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

при разборе PLISTs, массивов и словарей основные типы, с которыми вы имеете дело. Когда вы редактируете PLIST в Xcode - если вы устанавливаете что-то как тип массива, то все его дочерние элементы перечислены как "пункт 0, пункт 1, пункт 2..."в то время как если вы установите его как тип словаря, то это дети-пары ключ:значение.

один значительный вариант использования для типов различий выглядит следующим образом.

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

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


массив-это просто упорядоченный список объектов. Словарь хранит пары ключ-значение.

например:

Array: obj1, obj2, ob3, ...

словарь:

{

    @"Name": @"Bob"

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

}

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


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

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

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

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

надеюсь, что это помогает.


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


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


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