Это займет две произвольные точки и даст вам 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 высота.
Если у вас есть один ключ и два значения, вы, вероятно, создадите класс для этих двух значений и по-прежнему будете использовать словарь.
Если у вас есть два ключа и одно значение, вы, вероятно, будете используйте вложенный словарь, то есть словарь, в котором ключ является первым ключом, а значение - другим словарем. Ключ для вложенного словаря будет вторым ключом, а значение будет вашим фактическим значением.
ETA:
Теперь, когда вы прояснили свой вопрос - если вам нужно получить доступ к своей коллекции как по ключу, так и по целочисленный индекс, вы все равно можете использовать словарь.
Чтобы получить элемент по ключу, вы должны сделать следующее:
[myDict objectForKey:@"joe"];
Чтобы получить элемент по индексу, вы можете использовать массив allKeys:
[myDict objectForKey:[[myDict allKeys] objectAtIndex:1]];
Если единственная цель для получение людей по индексу проходит по всей коллекции, вы '
Сначала это может показаться несвязанным, но ознакомьтесь со структурой, ориентированной на словарь, в этом Introduction to Cocoa Bindings . (CocoaDevCentral и Скотт Стивенсон - отличные ресурсы для новых разработчиков Cocoa.) Используемый им подход чрезвычайно гибок и его легко изменить в будущем. Использование словаря вместо ivars - не всегда лучшее решение, но оно может быть подходящим для ваших нужд.
Примечание: Как и Core Data, привязки какао также являются очень сложной темой. Я предлагаю использовать только организационный аспект учебника, а не использовать привязки. : -)
Вы можете использовать core data для представления более сложных взаимосвязей данных с использованием модели реляционной базы данных.
Посетите сайт разработчиков Apple, чтобы найти примеры и документацию.
Вам нужно заглянуть в CoreData (если вы ее храните) и определить класс для вашего объекта. Родные универсальные объекты, такие как NSDictionary, не предназначены для хранения сложных значений, которые составляют сложные объекты, такие как Person.
Person *person = [[Person alloc] init];
person.firstName = @"blah";
person.age = 24;
person.isAlive = YES;
Это зависит от того, пытаетесь ли вы создать какую-то обобщенную структуру данных или нет. Если «три» являются конкретными концепциями в вашем приложении, возможно, вы движетесь к модели предметной области - и в этом случае вам может быть разумно инкапсулировать эти значения в классе.
Если вам требуется словарная функциональность - [NSDictionary objectForKey:] и т. д. - тогда вы все равно можете использовать один или несколько словарей в качестве индексов, которые сопоставляют значения ключей с экземплярами вашего класса.