Если NSDictionary хорош для парных значений, что хорошо для тройных значений?

StackOverflow https://stackoverflow.com/questions/1017564

Вопрос

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;

Разве это не описание двумерного массива ?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top