2009-10-07 77 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