2012-02-23 85 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很有用。