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

Objective c 将NSValue CGPointValue的x值转换为NSNumber的最有效方法,objective-c,cocoa-touch,type-conversion,nsnumber,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对象的objec

我有一个数组,里面有一堆NSValue对象。这些对象本质上是CGPoints的包装器。我需要用这些CGPoints创建一个NSDictionary,记录给定y值中x值最大的点。例如,可能有多个点共享相同的y值,但只有该y值的x值最大的点才应记录在NSDictionary中。最终,y值是键,x值是该键的值

当我在NSValue对象数组中循环时,我需要将它们的x值与具有相同y值的NSDictionary条目的x值进行比较(如果不存在,则创建条目)。为此,我使用NSDictionary对象的
objectForKey
方法。但此方法需要类型为
id
的对象(不可描述的对象)。这让我想到了这个问题

我要传递给
objectForKey
方法的
id
类型的对象就是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
    }
}

我要指出的是,对键使用浮点值是非常不明智的。@Daniel R Hicks:你能解释一下为什么吗?这是一个临时NSDictionary对象,基本上用作关联数组。y值(浮点)是我想要与之比较对应的x值的值。我当然愿意接受更好的方法。浮点是不精确的,所以相等的比较可能找不到你认为应该存在的对象。@Abizern-谢谢,很高兴知道。然而,我实际上知道我所有的x和y值都是整数。然后在将它们用作键之前,将浮点数转换为NSIntegers。