字典和数组之间有什么区别?

时间:2012-02-23 15:30:54

标签: objective-c ios nsarray plist nsdictionary

字典和数组之间有什么区别,特别是在使用PLIST文件时?使用一个优于另一个有什么好处?谢谢!

6 个答案:

答案 0 :(得分:32)

NSDictionaryNSArray都是集合类,即将其他对象组合在一起。

NSArray是一个有序的集合' - 集合中的每个项目都有一个整数索引,因此对项目有明确的顺序。如果你交换集合中的项目顺序,那么集合不再是相同的'因为订单不同。对象可能在集合中出现多次。

NSSet是一个无序的集合' - 每件物品都放在一个袋子里,订单无关紧要,一件物品只能放在袋子里一次。

NSDictionary是一个索引的集合' - 集合中的每个项目都有一个密钥,可以使用该密钥检索。一个对象可能出现不止一次,因为不同的键可能指向同一个对象,但一个键只能出现一次。字典也是一种“哈希表”的形式。如果你有计算机科学背景。

解析PLIST时,Arrays和Dictionaries是您处理的主要类型。当您在Xcode中编辑PLIST时 - 如果您将某些内容设置为数组类型,那么它的所有子项都会列为"项目0,项目1,项目2 ..."而如果你把它设置为字典类型,那么它的子节点是关键:值对。

差异类型的一个重要用例如下。

想象一下杂志申请,其中包含许多文章。文章的顺序很重要,因此您可以将每篇文章存储在一个数组中。如果要更改文章的顺序,可以更改plist中数组的顺序。

文章本身可以由字典表示,可能包含诸如" TextFile","背景"," ArticleType"等键。您使用Dictionary是因为您可以在将来的某个时刻向字典添加更多信息,而key:value机制使您的代码可以理解。

答案 1 :(得分:4)

数组只是一个排序的对象列表。字典存储键值对。

例如:

Array: obj1, obj2, ob3, ...

字典:

{

    @"Name": @"Bob"

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

}

没有任何优点或缺点,它们只是两种数据结构,您可以使用所需的数据结构。

答案 2 :(得分:4)

关键区别在于如何在其中进行访问。

数组和字典都是容器,可以随后读取(例如,可以通过索引和字典通过键来枚举数组)。但是当数组维持对象之间的顺序时,字典不是。

此外,使用词典,您可以以更加用户友好的方式(一个助记符)访问具有特定键的特定对象。例如,在字典中,您确定使用特定键(例如“text”)与特定对象相关联,例如NSString。同样可能对阵列有效,但有一些困难。例如,您如何确定在索引0处有特定对象NSString

关于你的问题,据我所知(从Xcode 4开始),plists将根对象作为字典。有关详细信息,请参阅how-do-you-change-a-plists-root-object-type-to-nsarray-in-xcode-4

希望它有所帮助。

答案 3 :(得分:2)

词典将键与值(对象)相关联,并且不保留项目的顺序。数组访问由索引完成 - 保留顺序。 PLIst添加能力使用XML来定义数据(键,值对)。

答案 4 :(得分:-1)

当您想要访问特定键值时,NSDictionary非常有用。 当您想要访问顺序数据时,NsArray非常有用。

答案 5 :(得分:-2)

NSDictionary不会保留其“值”对象,但NSMutableArray会保留添加到其中的对象。有关详细信息NSDictionaryNSArray