Я ищу тип или структуру данных для хранения большого количества примитивов того же типа в моем приложении (Mac OS X или iOS) с использованием Objective C. Как я понял, NSNumber хранит только один примитив (исправьте меня, если я ошибаюсь) , Я имею, скажем, тысячи целых чисел или строк. Что было бы лучшим решением для размещения, хранения и доступа к ним там? NSSet, NSArray, NSMutableArray, NSDictionary, NSMutableDictionary или что-то еще? Я знаю, что у них разные функции, но я в основном забочусь только о выполнении основных операций (установка, хранение, извлечение).Что является самым надежным и быстрым типом или структурой данных для хранения данных с помощью Objective C?
ответ
Это зависит только от того, как вы хотите добавлять, хранить и удалять эти данные.
Первый Давайте пройти через каждый тип структуры данных, которая доступна нам в Objective-C:
Примитивный массива
Это самый основной тип хранения в Objective-C (или C), который используется для хранения примитивов. Ex: int a[4] = {1, 2, 3, 4};
Ограничение на это
- Может хранить только примитивные типы.
- Размер массива не может быть изменен после объявления.
- Может быть восстановлен только по его индексу.
- Может хранить только данные одного типа, определенные во время объявления массива.
NSArray
Это контейнер для хранения объектов. Любой объект, который имеет тип NSObject
(или наследует от NSObject
) или имеет тип «id», может быть сохранен в NSArray
.
- После инициализации он не может быть изменен, т. Е. Размер массива не может быть изменен, и объекты, которые он содержит, могут быть изменены. Это хорошо с точки зрения безопасности.
- Объектов доступен только по его указателю.
NSMutableArray
NSArray
То же, но
- Может быть мутировал, то есть существующие объекты могут быть изменены, а также новые объекты могут быть добавлены или удалены.
NSSet
NSArray
То же, но
- магазины только уникальные объекты.
- Объекты не могут быть доступны по его индексу. Объекты могут быть доступны только путем перечисления.
NSMutableSet
То же, что NSSet
, но
- Может быть мутантным, то есть объекты могут быть добавлены или удалены в более поздний момент времени.
NSOrderedSet
NSArray
То же, то есть объекты хранятся и извлекаются с помощью индекса, но
- хранит только уникальные объекты.
NSMutableOrderedSet
То же NSMutableArray
, но
- магазины только уникальные объекты.
NSDictionary
может хранить данные любого типа.
- Объекты хранятся и извлекаются ключом.
- После инициализации не может быть изменен, т. Е. Не может добавлять новые значения ключа и не обновлять существующие объекты, связанные с определенным ключом.
NSMutableDictionary
То же, что NSDictionary
- Может быть мутантным, то есть новые объекты могут быть добавлены или удалены, а существующие объекты могут быть изменены.
Это было краткое описание наиболее часто используемых структур данных в Objective-C. Они используются на основе потребности в программе и способах обработки данных.
Поэтому
- Если вы хотите хранить тысячи чисел и строк и хотите получить доступ к этому его значение индекса используйте
NSMutableArray
. Если вы не собираетесь добавлять, удалять или изменять какие-либо объекты в будущем, используйтеNSArray
. - Если вы хотите хранить данные, но не хотите, дубликаты и хотите получить доступ к нему по его индексу ЕГЭ
NSOrderedSet
/NSMutableOrderedSet
- Если вы хотите хранить данные, но не хотите, дубликаты и порядок его также не имеет значения, то использование
NSSet
/NSMutableSet
. - Если вы хотите получить доступ к данным конкретного ключа затем использовать
NSDictionary
/NSMutableDictionary
Что касается производительности
- Поскольку
NSSet
не содержит какой-либо заказ, они более производительные, чемNSArray
Here - это очень хорошо спосо и подробные статьи по эксплуатационным характеристикам для каждой структуры данных обсуждалось выше
Class Time [ms] 1,000,000 elements
Добавление
NSMutableOrderedSet 3190.52 NSMutableDictionary 2522.47 NSMutableSet 2511.96 NSMutableArray 1423.26 NSSet 8.03
Random Access
NSMutableOrderedSet 10.74 NSMutableDictionary 9.18 NSMutableArray 8.08 NSMutableSet 4.47 NSSet 3.56
Чтобы узнать больше о Objective-C Типы данных и структура данных, читать this
Поскольку это очень яркое описание различных типов с различными функциями (хорошее объяснение/напоминание для каждого пользователя), остается открытым вопрос о производительности в реальном времени. Например, хорошее сравнение, но только между NSData и NSArray: http://iwantmyreal.name/blog/2012/09/29/a-faster-array-in-objective-c/ –
Спасибо @DariusMiliauskas, что было оценено ! Я добавил статью о характеристиках производительности для каждой структуры данных, описанной выше. Пожалуйста, взгляните на это. –
Замечательный ответ. Спасибо, что поделился. – arqam