2014-10-04 59 views
0

我有一个NSDictionary需要存储特定x/y坐标的对象。因为这是针对iOS(同时使用cocos2d和box2d)的,所以我已经必须处理存储为CGPointb2Vec2的不同坐标集 - 但我需要一些可以正确用作字典的关键字的坐标。坐标的NSDictionary键的正确格式

我见过的一个例子将这些坐标合并为NSString,但这对我来说似乎效率很低。我用它作为临时措施,果然,我看到糟糕的表现。

NSString *coordKey = [NSString stringWithFormat:@"%f%f", coord.x, coord.y];

我很好编写自定义NSCopying对象持有的坐标,但我想如果这是真正的最佳途径......

  • 有一个现有的对象我可以使用?
  • 自定义对象比哑字符串格式化方法好得多
  • 有没有什么办法可以使用现有的b2Vec2坐标格式我已经有一些数据了?
+0

你用'NSValue's试过了吗?他们应该能够持有'CGPoint' – DeFrenZ 2014-10-04 23:03:48

回答

0

我希望它的工作,如果你定义保存float32 x, y坐标类,实现了NSCopying协议,并实现了良好hash方法。

然而,这个哈希表只会在完全相同(x,y)坐标处查询时才会检索对象。依靠浮点平等不是一个好的做法,尽管如果查找键来自枚举已知值的列表而不是进行一些计算,它可能会工作。

考虑使用quadtree。这是一棵通过递归细分为4个象限来组织其内容的树。

+0

我应该提到这些坐标纯粹是整数,而不是官方对浮点数的任何需要。 – helion3 2014-10-04 22:29:26

+0

整数更好。如果您的密钥类存储'int x,y',那么它不会受浮点问题或性能成本的影响,但浮点问题只有在数字超过±2^24时才成问题。两个整数很容易散列在一起,例如'7 + x * 3 + y * 5'。 – Jerry101 2014-10-04 22:39:58