В чем разница между словарем и массивом?
в чем разница между словарем и массивом, особенно при работе с файлами 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