美文网首页
数组和字典相关知识

数组和字典相关知识

作者: _Lily | 来源:发表于2015-12-20 13:08 被阅读158次

一、数组与字典都可当做容器,里边可以存放任何对象。只不过,他们存放数据时会有区别:

数组:只需将对象放入,使用addObject:方法

字典,除了要放入对象,还要存入与对象所对应的另一个对象(一般是NSString)作为key,使用setObject:  forKey:方法。寻找对象时,就可以通过key获得。是以键值对的形式存在的。

如果要在数组中存一个空值时,使用空对象[NSNull  null]。注意不能使用nil,因为nil是数组或者字典的结束标记。另外注意区别:nil是一个对象指针为空,Nil是一个类指针为空,NULL是基本数据类型为空。

二、关于setValue: forKey:与setObject: forKey:

1、setValue: forKey:是OC对象的方法

value 为 nil :调用 removeObject:forKey:

value不为nil:调用 setObject:forKey:

其中key为NSString类型。

2 、setObject:forKey:是可变字典的方法

value不能为nil,而且key是一个id类型,不仅限于NSString类型

3、另外,setValue采用的是KVC机制,而setObject不是。

( KVC(Key-Value-Coding)内部的实现:一个对象在调用setValue的时候,(1)首先根据方法名找到运行方法的时候所需要的环境参数。(2)他会从自己isa指针结合环境参数,找到具体的方法实现的接口。(3)再直接查找得来的具体的方法实现。KVO(Key-Value-Observing):当观察者为一个对象的属性进行了注册,被观察对象的isa指针被修改的时候,isa指针就会指向一个中间类,而不是真实的类。所以isa指针其实不需要指向实例对象真实的类。所以我们的程序最好不要依赖于isa指针。在调用类的方法的时候,最好要明确对象实例的类名。)

三、遍历

1、数组遍历

NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4", nil];

//第一种遍历:普通for循环

long int count = [array count];

for (int i = 0 ; i < count; i++) {

NSLog(@"1遍历array: %zi-->%@",i,[array objectAtIndex:i]);

}

//第二种遍历:快速for循环,需要有外变量i

int i = 0;

for (id obj in array) {

NSLog(@"2遍历array:%zi-->%@",i,[array objectAtIndex:i]);

i++;

}

//第三种遍历:OC自带方法enumerateObjectsUsingBlock:

//默认为正序遍历

[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

NSLog(@"3遍历array:%zi-->%@",idx,obj);

}];

//NSEnumerationReverse参数为倒序遍历

[array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

NSLog(@"4倒序遍历array:%zi-->%@",idx,obj);

}];

//第四种遍历:利用枚举

NSEnumerator *en = [array objectEnumerator];

id obj;

int j = 0 ;

while (obj = [en nextObject]) {

NSLog(@"5遍历array:%d-->%@",j,obj);

j++;

}

}

2、字典遍历

//第一种遍历:allValues遍历。NSDictionary函数allValues会返回以数组而非字典形式组织的对象。使用for-each循环遍历字典中的对象,可以通过如下代码实现:

for (NSString *s in [dictionary allValues]) {

NSLog(@"value: %@", s);

}

//第二种:allKeys遍历。NSDictionary函数allKeys会将键值作为数组返回:

for (NSString *s in [dictionary allKeys]) {

NSLog(@"key: %@", s);

}

//第三种:block 遍历。通过enumerateKeysAndObjectsUsingBlock:方法针对字典中的每个对象执行代码。可以用来定义代码块,然后应用到字典中的每个对象,同时又不必创建for-each循环或是获得数组版本的字典引用:

[dictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {

NSLog(@"key = %@ and obj = %@", key, obj);

}];

其中对于数组来说,for-in方式遍历速度是最快的,普通风格的for和block方式速度差不多。对于字典来说,allValues方式遍历最快,allKeys和block差不多。

相关文章

  • 数组和字典相关知识

    一、数组与字典都可当做容器,里边可以存放任何对象。只不过,他们存放数据时会有区别: 数组:只需将对象放入,使用ad...

  • 数组和字典的关系 -好基友

    JSON数据格式: 数组和字典的关系 -好基友,套来套去 字典套 数组套 字典 { "succes...

  • 第六天作业

    预习数组 相关知识

  • 数组和字典

    为什么用集合有时候系统中有很多的对象,我们想要有条理的将其进行管理首先想到的就是使用数组来管理一批数据但是数组有局...

  • 100-SQLite基础

    iOS中的数据存储方式 Plist(NSArray\NSDictionary),只能存储数组,字典,但是数组和字典...

  • 集合与字典(下)----字典

    字典,又被称为映射或关联数组,也是一种数据结构类型。字典中包含关键码和属性的二元组称作关联。与字典相关的基本操作包...

  • 针对代码中的容错问题做了归纳总结

    #pragma mark ###容错相关方法 /*****自测了一些能出现的情况主要是数组越界取值像数组或者字典里...

  • iOS 数组和字典NSLog及po输出中文

    前言 当你搜索“iOS 数组和字典NSLog输出中文” 时会找到:这个 iOS开发——输出中文(字典和数组)这个 ...

  • iOS常见的崩溃

    数组越界 字面量数组和字典插入nil值 字典 Unrecognized Selector NaN崩溃 富文本初始化...

  • python 学习笔记 015

    上节课:元组和字典 待办:歌词解析 项目Review 0.相关知识点复习: 循环字典变量字符串处理 函数基础 1....

网友评论

      本文标题:数组和字典相关知识

      本文链接:https://www.haomeiwen.com/subject/qeqmhttx.html