我有一组带有一堆NSValue对象的数组。这些对象实际上是CGPoints的包装器。我需要从这些CGPoints中创建一个NSDictionary,记录那些对于给定y值具有最大x值的点。例如,可能有多个点共享相同的y值,但只有具有该y值的最大x值的点应记录在NSDictionary中。最终,y值是键,x值是该键的值。
当我循环遍历NSValue对象数组时,我需要将它们的x值与具有相同y值的NSDictionary条目的x值进行比较(如果不存在,则创建条目)。为此,我使用NSDictionary对象的objectForKey
方法。但是这种方法需要一个类型为id
的对象(一个非描述对象)。这让我想到了这个问题。
我将要传递给id
方法的objectForKey
类型的对象只是CGPoint的y值。但是我通过首先将NSValue对象转换为CGPoint来获得该y值。所以,一旦我这样做,我必须将该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
}
}