2012-02-23 116 views

回答

31

NSDictionaryNSArray都是集合類,即將其他對象組在一起。

NSArray是一個'有序集合' - 集合中的每個項目都有一個整數索引,所以有一個明確的項目順序。如果您交換集合中的項目順序,那麼集合不再是與訂單不同的「相同」。一個對象可能會在集合中多次出現。

一個NSSet是一個'無序集合' - 每個項目出現在一個包裏,順序無關緊要,一個對象只能在包裏存在一次。

NSDictionary是一個'索引集合' - 集合中的每個項目都有一個關鍵字,並且可以使用該關鍵字進行檢索。一個對象可能會出現多次,因爲不同的鍵可能指向同一個對象,但一個鍵只能出現一次。如果您擁有計算機科學背景,字典也是「哈希表」的一種形式。

解析PLIST時,數組和字典是您處理的主要類型。當你在Xcode中編輯一個PLIST時 - 如果你設置了一個Array類型的東西,那麼它的所有子節點都被列爲「Item 0,Item 1,Item 2 ...」,而如果你將它設置爲Dictionary類型,那麼它就是孩子是關鍵:價值對。

差異類型的一個重要用例如下。

想象一下包含許多文章的雜誌應用程序。文章的順序很重要,因此您可以將每篇文章存儲在一個數組中。如果您想更改文章的順序,您可以更改plist中的數組順序。

這些文章本身可能由字典表示,可能包含諸如「TextFile」,「Background」,「ArticleType」之類的關鍵字。您使用字典是因爲您可能會在將來的某個時間點向字典中添加更多信息,並且key:value機制使您的代碼易於理解。

+0

非常感謝您解釋這個!它確實有幫助。 – 2012-02-23 16:06:52

+0

謝謝。這節省了我的時間。 – Raja 2017-10-23 05:46:46

4

數組只是對象的排序列表。字典存儲鍵值對。

例如:

Array: obj1, obj2, ob3, ... 

詞典:

{ 

    @"Name": @"Bob" 

    @"Age": 20 (but NSDictionary can only store objects, so that would be a NSNumber) 

} 

有沒有優點或缺點,他們只是兩個數據結構,並使用一個你需要的。

2

字典將關鍵字與值(對象)關聯,並且不保留項目的順序。數組訪問通過索引完成 - 訂單被保留。 PLIst添加使用用途XML來定義數據(鍵,值對)的能力。

-2

NSDictionary不保留其'值'對象,但NSMutableArray保留添加到它的對象。欲瞭解更多信息NSDictionaryNSArray

+1

這是不正確的 - NSDictionary保留它的值,但不是它的鍵。 – ikuramedia 2013-07-26 00:24:59

4

關鍵的區別是你如何訪問他們。

數組和字典都是容器,可以依次讀取(例如,可以通過索引和字典通過鍵來枚舉數組)。但是,當數組維持對象之間的順序時,字典不是。

此外,通過字典,您可以使用特定鍵以更友好的方式訪問特定對象(助記符)。例如,在字典中,您肯定知道使用特定鍵(例如「text」)與特定對象關聯,例如NSString。對於陣列也是一樣,但有一些困難。例如,你如何確定在索引0處有特定對象NSString

關於你的問題,據我所知(自Xcode 4以來),plists有一個字典作爲根對象。詳情請參閱how-do-you-change-a-plists-root-object-type-to-nsarray-in-xcode-4

希望它有幫助。

-1

NSDictionary是非常有用的,你想訪問一個特定的鍵值。 當你想訪問一個sequntial數據時,NsArray很有用。