2009-10-07 68 views
0

我需要跟踪一堆可以通过两个键(实际上是经度和纬度,但还有其他一些属性)标识的对象。我需要做这样的事情,如通过这两个键搜索特定的对象,如果它存在则更新它,如果不存在则插入。我刚在想。我在看NSDictionary和NSSet,但认为我会听到群众不得不说的。iPhone:数据结构选择

回答

4

我想简单的方法是使用NSDictionary。您只需执行[dic objectForKey:key]即可获取您的数据。

此外,一个好的做法是创建密钥的一些定义,所以它更容易改变的项名称,也避免错字:

#define kObjectLatitude @"Latitude" 
#define kObjectLongitude @"Longitude" 

[object setObject:lat forKey:kObjectLatitude]; 
[object setObject:lon forKey:kObjectLongitude]; 

不要忘了写在了定义聪明的地方。如果仅在一个类中使用它,只需将它们写在声明的顶部。但是,如果您需要通过代码的不同部分来使用它们,则可以考虑将其移动到主类的头文件或用于定义的特定头文件:)

NS(可变)集将无用为你在这种情况下。 NSSets是数学集,你不能用特定的键访问特定的数据(也就是说,你不能问一个集合:“嘿,给我的经度,你永远保存它!”)

2

使用NSDictionary 。这就是它的意思。

3

这不是一个直接的答案,而是一个警告词。经度和纬度是CLLocationDegrees,它是一个双精度浮点值。由于浮点数学是不精确的,因此测试浮点数的平等是一个有风险的命题。您可以轻松地在两个理论上相同的浮点上进行平等测试。我不知道你的应用程序的要求,但你可能想要测试接近度而不是平等。

+0

好评,谢谢。在涉及花车的数学运算时,我一定被咬过。我已经把他们四舍五入到几个有效数字,并且似乎到目前为止工作。将注意这一点。 – Codezy 2009-10-07 05:01:11