Если NSDictionary хорош для парных значений, что хорошо для тройных значений?
-
06-07-2019 - |
Вопрос
NSDictionary хорош для пар ключ-значение. Какая структура данных лучше всего подходит, когда у вас есть три значения?Лучше всего создать класс для этих трех значений, а затем позволить каждому объекту в массиве содержать экземпляры этого класса?
Чтобы быть конкретным:Структура данных, назовем ее Person, как я предполагаю, имеет три значения:(NSString)имя, (int)возраст, (BOOL)isAlive
Они будут храниться в массиве (?).Важно иметь возможность использовать имя как ключ, а также ссылаться на весь блок с помощью номера, начиная с нуля.
Решение
Если у вас есть один ключ и два значения, вы, вероятно, создадите класс для этих двух значений и по-прежнему будете использовать словарь.
Если у вас есть два ключа и одно значение, вы, вероятно, будете использовать вложенный словарь, то есть словарь, в котором ключ является первым ключом, а значение — другим словарем.Ключом вложенного словаря будет второй ключ, а значением будет ваше фактическое значение.
Расчетное время прибытия:
Теперь, когда вы прояснили свой вопрос: если вам нужно получить доступ к своей коллекции как по ключу, так и по целочисленному индексу, вы все равно можете использовать словарь.
Чтобы получить элемент по ключу, вы должны сделать следующее:
[myDict objectForKey:@"joe"];
Чтобы получить элемент по индексу, вы можете использовать массив allKeys:
[myDict objectForKey:[[myDict allKeys] objectAtIndex:1]];
Если единственной целью получения людей по индексу является цикл по всей коллекции, вам лучше использовать метод keyEnumerator для перечисления ключей в цикле и использования этих ключей для поиска значений.
Другие советы
Вы можете использовать основные данные для представления более сложных отношений данных, используя модель реляционной базы данных. Р>
Посетите сайт разработчика Apple для примеров и документации.
Сначала это может показаться не связанным, но ознакомьтесь со структурой, ориентированной на словарь, в этом введении в Привязки какао . (CocoaDevCentral и Скотт Стивенсон - отличные ресурсы для новых разработчиков Cocoa.) Подход, который он использует, чрезвычайно гибок и его легко изменить в будущем. Использование словаря вместо ivars - не всегда лучшее решение, но оно может подойти для ваших нужд.
Примечание. Как и основные данные, привязка какао также является очень сложной темой. Я предлагаю использовать только организационный аспект учебника, а не привязываться к нему полностью. : -)
Это зависит от того, пытаетесь ли вы создать какую-то обобщенную структуру данных или нет. Если «три» являются конкретными понятиями в вашем приложении, то вы, возможно, движетесь к модели домена - в этом случае вам может быть целесообразно инкапсулировать эти значения в классе.
Если вам требуется словарь, подобный функциональности - [NSDictionary objectForKey:] и т. д. - тогда вы все равно можете использовать один или несколько словарей в качестве индексов, которые сопоставляют значения ключей с экземплярами вашего класса.
Вам нужно изучить CoreData (если вы его храните) и определить класс для вашего объекта. Собственные родовые объекты, такие как NSDictionary, не предназначены для хранения сложных значений, которые составляют сложные объекты, такие как Person.
Person *person = [[Person alloc] init];
person.firstName = @"blah";
person.age = 24;
person.isAlive = YES;
Разве это не описание двумерного массива ? р>