字典和數組之間有什麼區別,特別是使用PLIST文件時?使用其中一個的優點是什麼?謝謝!字典和數組有什麼區別?
回答
NSDictionary
和NSArray
都是集合類,即將其他對象組在一起。
NSArray是一個'有序集合' - 集合中的每個項目都有一個整數索引,所以有一個明確的項目順序。如果您交換集合中的項目順序,那麼集合不再是與訂單不同的「相同」。一個對象可能會在集合中多次出現。
一個NSSet是一個'無序集合' - 每個項目出現在一個包裏,順序無關緊要,一個對象只能在包裏存在一次。
NSDictionary是一個'索引集合' - 集合中的每個項目都有一個關鍵字,並且可以使用該關鍵字進行檢索。一個對象可能會出現多次,因爲不同的鍵可能指向同一個對象,但一個鍵只能出現一次。如果您擁有計算機科學背景,字典也是「哈希表」的一種形式。
解析PLIST時,數組和字典是您處理的主要類型。當你在Xcode中編輯一個PLIST時 - 如果你設置了一個Array類型的東西,那麼它的所有子節點都被列爲「Item 0,Item 1,Item 2 ...」,而如果你將它設置爲Dictionary類型,那麼它就是孩子是關鍵:價值對。
差異類型的一個重要用例如下。
想象一下包含許多文章的雜誌應用程序。文章的順序很重要,因此您可以將每篇文章存儲在一個數組中。如果您想更改文章的順序,您可以更改plist中的數組順序。
這些文章本身可能由字典表示,可能包含諸如「TextFile」,「Background」,「ArticleType」之類的關鍵字。您使用字典是因爲您可能會在將來的某個時間點向字典中添加更多信息,並且key:value機制使您的代碼易於理解。
數組只是對象的排序列表。字典存儲鍵值對。
例如:
Array: obj1, obj2, ob3, ...
詞典:
{
@"Name": @"Bob"
@"Age": 20 (but NSDictionary can only store objects, so that would be a NSNumber)
}
有沒有優點或缺點,他們只是兩個數據結構,並使用一個你需要的。
字典將關鍵字與值(對象)關聯,並且不保留項目的順序。數組訪問通過索引完成 - 訂單被保留。 PLIst添加使用用途XML來定義數據(鍵,值對)的能力。
NSDictionary不保留其'值'對象,但NSMutableArray保留添加到它的對象。欲瞭解更多信息NSDictionary和NSArray
這是不正確的 - NSDictionary保留它的值,但不是它的鍵。 – ikuramedia 2013-07-26 00:24:59
關鍵的區別是你如何訪問他們。
數組和字典都是容器,可以依次讀取(例如,可以通過索引和字典通過鍵來枚舉數組)。但是,當數組維持對象之間的順序時,字典不是。
此外,通過字典,您可以使用特定鍵以更友好的方式訪問特定對象(助記符)。例如,在字典中,您肯定知道使用特定鍵(例如「text」)與特定對象關聯,例如NSString
。對於陣列也是一樣,但有一些困難。例如,你如何確定在索引0處有特定對象NSString
?
關於你的問題,據我所知(自Xcode 4以來),plists有一個字典作爲根對象。詳情請參閱how-do-you-change-a-plists-root-object-type-to-nsarray-in-xcode-4。
希望它有幫助。
NSDictionary是非常有用的,你想訪問一個特定的鍵值。 當你想訪問一個sequntial數據時,NsArray很有用。
- 1. IEnumerable和數組有什麼區別?
- 2. int和char數組有什麼區別?
- 3. malloc和數組有什麼區別
- 4. 數組和ArrayList有什麼區別?
- 5. 數組和散列有什麼區別?
- 6. 模式和數據字典有什麼區別?
- 7. Smalltalk中的數組和字面數組有什麼區別?
- 8. 字符串和Javascript中的字符數組有什麼區別?
- 9. 在asp.net中使用viewData字典和viewData.Model有什麼區別mvc
- 10. 方法字典和dictionaryWithCapacity有什麼區別?
- 11. 初始化字典和在Swift中聲明有什麼區別?
- 12. 十六進制和字符數組打印有什麼區別?
- 13. CPU和芯片組有什麼區別?
- 14. 元組和compress_pair有什麼區別?
- 15. 組件和指令有什麼區別?
- 16. 組件和涼亭有什麼區別?
- 17. NumPy數組和簡單Python數組有什麼區別?
- 18. 數組地址和數組本身有什麼區別嗎?
- 19. 原始數組和引用數組之間有什麼區別?
- 20. 嵌套數組和關聯數組有什麼區別?
- 21. 這兩個數組有什麼區別?
- 22. 數組與對象有什麼區別?
- 23. IPAddress.Any和IPAddress.IPv6Any字段有什麼區別?
- 24. 有什麼區別`和$(Bash中有什麼區別?
- 25. 有什麼區別? :和||
- 26. &&和||有什麼區別?
- 27. 「/」和「/ *」有什麼區別?
- 28. 有什麼區別:。!和:r!?
- 29. ==和===有什麼區別?
- 30. Appender和〜有什麼區別?
非常感謝您解釋這個!它確實有幫助。 – 2012-02-23 16:06:52
謝謝。這節省了我的時間。 – Raja 2017-10-23 05:46:46