将NSValue CGPointValue的x值转换为NSNumber的最有效方法

时间:2011-09-17 02:55:28

标签: objective-c cocoa-touch type-conversion nsnumber

我有一组带有一堆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
    }
}

0 个答案:

没有答案