2009-06-19 46 views
6

NSDictionary適用於鍵值對,通過哪種數據結構最適合您擁有三個值?是最好爲這3個值創建一個類,然後讓數組中的每個對象都包含該類的實例?如果NSDictionary對配對值有好處,那麼對於三重值有什麼好處?

具體來說:數據結構,讓我們稱之爲人,我設想有三個值: (的NSString)名稱,(INT)年齡,(BOOL)的IsAlive

這些將在陣列舉行(? )。能夠使用該名稱作爲關鍵字,並且還可以使用從零開始的數字來引用整個塊,這一點很重要。

+1

這個新結構是否有2個鍵和1個值或1個鍵和2個值?還是可以互換? – samoz 2009-06-19 12:04:00

+0

我認爲你需要更徹底地解釋這個問題。 – U62 2009-06-19 12:10:58

回答

9

如果您有一個鍵和兩個值,您可能會爲這兩個值創建一個類並仍然使用字典。

如果您有兩個鍵和一個值,則可能會使用嵌套字典 - 即字典,其中鍵是第一個鍵,值是另一個字典。嵌套字典的關鍵是第二個關鍵字,並且該值將是您的實際值。

ETA:

現在你已經澄清你的問題 - 如果你既需要通過按鍵或通過整數索引來訪問你的收藏,你仍然可以使用字典。

要獲得通過的關鍵項目,你可以這樣做:

[myDict objectForKey:@"joe"]; 

要獲取指標的項目,你可以使用allKeys陣列:

[myDict objectForKey:[[myDict allKeys] objectAtIndex:1]]; 

如果得到的唯一目的通過索引的人正在遍歷整個集合,您最好查看使用keyEnumerator方法枚舉循環中的鍵並使用這些鍵來查找值。

0

這取決於您是否嘗試製作某種通用數據結構。如果'三件事'是你的應用程序中的特定概念,那麼你可能會朝domain model邁進 - 在這種情況下,將這些值封裝在類中可能是明智的。

如果你需要類似功能的字典 - [NSDictionary objectForKey:]等 - 那麼你仍然可以使用一個或多個字典作爲將鍵值映射到你的類實例的索引。

1

使用關係數據庫模型,可以使用核心數據來表示更復雜的數據關係。

查看蘋果的開發者網站上的例子和文檔。

0

您需要查看CoreData(如果您正在存儲它)併爲您的對象定義一個類。像NSDictionary這樣的本機通用對象並不意味着存儲複雜對象,如組成複雜對象。

Person *person = [[Person alloc] init]; 
person.firstName = @"blah"; 
person.age = 24; 
person.isAlive = YES; 
1

看起來似乎並不相關,但請查看Introduction to Cocoa Bindings中的字典結構。 (CocoaDevCentral和Scott Stevenson是新可可開發人員的優秀資源)。他使用的方法非常靈活,並且易於改變。使用字典而不是ivars並不總是最好的解決方案,但它可能非常適合您的需求。

注意:和Core Data一樣,Cocoa Bindings也是一個非常複雜的話題。我建議僅使用本教程的組織部分,不要全面使用綁定。 :-)