Подтвердить что ты не робот

Какая разница между словарем и массивом?

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

Ответ 2

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

Например:

Array: obj1, obj2, ob3, ...

Словарь:

{

    @"Name": @"Bob"

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

}

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

Ответ 3

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

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

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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