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