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

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

CGRect r = CGRectMake(MIN(p1.x, p2.x), 
                      MIN(p1.y, p2.y), 
                      fabs(p1.x - p2.x), 
                      fabs(p1.y - p2.y));

Меньшее значение x в сочетании с меньшим значением y всегда будет источником прямоугольника (первые два аргумента). Абсолютным значением разницы между значениями x будет ширина, а между значениями y высота.

6
задан cannyboy 19 June 2009 в 12:24
поделиться

6 ответов

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

Если у вас есть два ключа и одно значение, вы, вероятно, будете используйте вложенный словарь, то есть словарь, в котором ключ является первым ключом, а значение - другим словарем. Ключ для вложенного словаря будет вторым ключом, а значение будет вашим фактическим значением.

ETA:

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

Чтобы получить элемент по ключу, вы должны сделать следующее:

[myDict objectForKey:@"joe"];

Чтобы получить элемент по индексу, вы можете использовать массив allKeys:

[myDict objectForKey:[[myDict allKeys] objectAtIndex:1]];

Если единственная цель для получение людей по индексу проходит по всей коллекции, вы '

9
ответ дан 10 December 2019 в 00:43
поделиться

Сначала это может показаться несвязанным, но ознакомьтесь со структурой, ориентированной на словарь, в этом Introduction to Cocoa Bindings . (CocoaDevCentral и Скотт Стивенсон - отличные ресурсы для новых разработчиков Cocoa.) Используемый им подход чрезвычайно гибок и его легко изменить в будущем. Использование словаря вместо ivars - не всегда лучшее решение, но оно может быть подходящим для ваших нужд.

Примечание: Как и Core Data, привязки какао также являются очень сложной темой. Я предлагаю использовать только организационный аспект учебника, а не использовать привязки. : -)

1
ответ дан 10 December 2019 в 00:43
поделиться

Вы можете использовать core data для представления более сложных взаимосвязей данных с использованием модели реляционной базы данных.

Посетите сайт разработчиков Apple, чтобы найти примеры и документацию.

1
ответ дан 10 December 2019 в 00:43
поделиться

Вам нужно заглянуть в CoreData (если вы ее храните) и определить класс для вашего объекта. Родные универсальные объекты, такие как NSDictionary, не предназначены для хранения сложных значений, которые составляют сложные объекты, такие как Person.

Person *person = [[Person alloc] init];
person.firstName = @"blah";
person.age = 24;
person.isAlive = YES;
0
ответ дан 10 December 2019 в 00:43
поделиться

Это зависит от того, пытаетесь ли вы создать какую-то обобщенную структуру данных или нет. Если «три» являются конкретными концепциями в вашем приложении, возможно, вы движетесь к модели предметной области - и в этом случае вам может быть разумно инкапсулировать эти значения в классе.

Если вам требуется словарная функциональность - [NSDictionary objectForKey:] и т. д. - тогда вы все равно можете использовать один или несколько словарей в качестве индексов, которые сопоставляют значения ключей с экземплярами вашего класса.

0
ответ дан 10 December 2019 в 00:43
поделиться

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

-1
ответ дан 10 December 2019 в 00:43
поделиться