У меня есть массив с кучей объектов NSValue. Эти объекты по сути являются обертками для CGPoints. Мне нужно создать NSDictionary из этих CGPoints, который записывает те точки, которые имеют наибольшее значение х для данного значения у. Например, может быть несколько точек, которые имеют одно и то же значение y, но только та, которая имеет наибольшее значение x для этого значения y, должна быть записана в NSDictionary. В конечном счете, значение y является ключом, а значение x является значением этого ключа.
Когда я перебираю массив объектов NSValue, мне нужно сравнить их значения x со значением x записи NSDictionary, имеющей такое же значение y (и, если она не существует, создать эту запись). Для этого я использую метод objectForKey
объекта NSDictionary. Но этот метод требует объект типа id
(необъявленный объект). Что подводит меня к вопросу.
Объект типа id
, который я собираюсь передать методу objectForKey
, является просто значением y в CGPoint. Но я получаю это значение y, сначала преобразовав объект NSValue в CGPoint. Поэтому, как только я это сделаю, я должен преобразовать это значение y обратно в объект (т.е. NSNumber numberWithFloat
). Это кажется мне неэффективным - преобразование объекта в CGPoint для извлечения CGFloat, который затем возвращается обратно в объект через NSNumber.
Есть ли лучший способ сделать это?
Вот мой текущий код:
for (NSValue *pt in myArrayOfPoints) {
NSNumber *y = [NSNumber numberWithFloat:[pt CGPointValue].y];
if ([leftSideEdgePtsFurthestInwards objectForKey:y] == nil) {
//yada yada yada
}
}