Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标C-字典和数组之间的差异?_Objective C - Fatal编程技术网

Objective c 目标C-字典和数组之间的差异?

Objective c 目标C-字典和数组之间的差异?,objective-c,Objective C,在Objective C中,字典和数组之间有什么区别?字典是否与key:value(其中key可以是任何对象)一起使用,数组是否为id:value(其中id是整数) 谢谢阵列 在Objective-C中,数组是一种可以存储对象类型的集合类型。它可以存储任何类型的对象。存储在数组中的对象链接到其索引号 如果创建数组并插入第一个对象,它将存储在“索引0”中 索引数将从0,1,2…n继续增加 使用“NSMutableArray”创建可以修改的数组 例如 NSMutableArray *array =

在Objective C中,字典和数组之间有什么区别?字典是否与key:value(其中key可以是任何对象)一起使用,数组是否为id:value(其中id是整数)

谢谢

阵列

在Objective-C中,数组是一种可以存储对象类型的集合类型。它可以存储任何类型的对象。存储在数组中的对象链接到其索引号

如果创建数组并插入第一个对象,它将存储在“索引0”中 索引数将从0,1,2…n继续增加

使用“NSMutableArray”创建可以修改的数组

例如

NSMutableArray *array = [NSMutableArray alloc] init];
[array addObject:@"Tom"];
[array addObject:@"Cat"];
NSMutableDictionary *dictionary = [NSMutableDictionary alloc] init];
[dictionary setObject:@"Tom" forkey:@"name"];
[dictionary setObject:@"Cat" forKey:@"animal"];
因此,在索引0处,您将有“Tom”。在索引1中,您将有“Cat”

字典

在Objective-C中,字典是存储“键值”对的集合类型。 “键”的类型为ID,因此您可以输入任何对象作为值的键

使用“NSMutableDictionary”创建可以修改的词典

例如

NSMutableArray *array = [NSMutableArray alloc] init];
[array addObject:@"Tom"];
[array addObject:@"Cat"];
NSMutableDictionary *dictionary = [NSMutableDictionary alloc] init];
[dictionary setObject:@"Tom" forkey:@"name"];
[dictionary setObject:@"Cat" forKey:@"animal"];
数组和字典之间的关键区别在于字典中对象的顺序发生了变化,而数组中存储的对象的顺序是连续的

[编辑]

由于关于这个答案已经进行了相当多的讨论,我将明确指出,数组不会像一些评论所说的那样被重新创建


数组/字典的大小会动态增加,以容纳集合中的新元素。

NSMutableArray在修改数组时在内部重新创建数组。这是一项非常昂贵的手术。除非确实需要,否则最好不要使用NSMUTABLEARRY。NSMUTABLEARRY只有在超出当前容量时才应重新创建阵列。否则就不应该。此外,它在如何增加容量方面应该相当聪明(但我没有验证当前的实现是否正确)。如果您正确地使用它(通过设置适当的容量),使用起来应该非常便宜。事实上,在我看来,经过一点调查后,
NSMutableArray
根本不会重新创建数组。它似乎在内部使用类似于deque的ADT。NSArray并不总是作为C数组实现,对NSArray的一些调查强烈表明,对于不同的大小,实现会发生变化。即使使用带有虚拟内存的C阵列,扩展内存块也很便宜,这是因为使用的实际内存地址与使用的虚拟地址不同,因此可以从随机定位的内存块中创建单个虚拟内存块,我不知道这在没有VM的iOS上如何工作,也许它只是像虚拟内存系统一样使用内存分页,而不是写入磁盘。@NathanDay您所说的一切都可以完成,但前提是数组是在页面边界上分配的,并且只能使用对操作系统的专门调用。这不是发生的情况,它只对非常大的阵列(可能是几十个GiB)有益。过去的情况是,如果数组是可变的(也称为NSMUTABLEARRY),那么它从一个普通的C数组开始,但最终变成了一个高于一定数量元素的deque。似乎最现代的版本总是使用deque,但我还没有分析整个源代码。