04-Foundation-NSSet、NSDictionary、block
目录:
一、NSSet集合
1 NSSet是一个无序的,管理对个对象的集合类,最大特点是集合中不允许出现重复对象,和数学上的集合含义是一样的。除了无序,不许重复,其他功能和NSArray是一样的。
2 什么叫重复?
* 同一个对象
* 两个对象信息值一样
计算机认为的一样是:同一个对象
3 对象的哈希值(hash)
* set中确定对象是否是重复的?例如A对象和B对象,先调用A对象的hash方法得到一个整数,在调用B对象的hash方法得到一个整数,如果整数不相同,计算机就认为两个对象是不同的对象(没有重复)
* 因为计算机认为同一个对象才是重复的,而不同对象相同值是不能判断的,所有我们要重写hash方法来判断里面的值是否相同,如果hash值相同此时会再次调用对象的isEqual方法,再次判断两个对象是否相同。
 -(BOOL)isEqual:(id)object{
     NSLog(@"isEqual执行了");
     //判断类型
     //判断对象是否是同一对象
     if (self == object) {
         return YES;
     }else if([object isMemberOfClass:[Student class]]){
         //判断对象中每一个属性的值
         Student* stu2 = object;
         if ([self.name isEqualToString:stu2.name]){
             return YES;
         }else{
             return NO;
         }
     }else{
         return NO;
     }
 }
练习:创建Point类,有两个属性x,y,创建三个对象放到NSSet集合中,point1(3,5)point2(3,6)point3(3,5)遍历NSSet集合,使用快速枚举、迭代器。
练习:学生->班级->学院->学校
8 4 2 1
* 查看所有学生信息
* 显示 姓名zhangsan
* 显示 年龄18
(NSArray NSMutableArray)
二、NSDictionary字典
NSMutableDictionary可变字典
1 是由键-值对组合的集合
2 通过key,找到相应的value,通常来讲,key的值是字符串类型,value的值是任意对象类型。
3 key的值不允许重复,value的值是可以重复
4 通常来讲,key的值与value的值不允许为空
5 可以保存多条数据
// 初始化
NSDictionary* dic = [NSDictionary dictionaryWithObjectsAndKeys:@"v1",@"k1",@"v2",@"k2",@"v3",@"k3", nil];//1值2键3值4键...如果键名相同了只保存第一个键的值
NSLog(@"%@",dic); NSMutableDictionary* dic2 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"v1",@"k1",@"v2",@"k2",@"v3",@"k3", nil];//1值2键3值4键...如果键名相同了只保存第一个键的值
//添加键值对
[dic2 setValue:@"v4" forKey:@"k4"];
NSLog(@"%@",dic2);
//通过健查找值
NSString* value = [dic2 objectForKey:@"k1"];
NSLog(@"key:%@->value:%@",@"k1",value);
//遍历
//得到所有的key
NSArray* keys = [dic2 allKeys];
//通过对key排序来搞定对字典的排序
NSArray* newKeys = [keys sortedArrayUsingSelector:@selector(compare:)];
for (NSString* k in newKeys) {
NSLog(@"%@->%@",k,[dic2 objectForKey:k]);
}
三、block代码块
1 block封装一段代码,可以在任何时候执行,block可以做为函数参数或函数的返回值,而本身又可以带输入参数或返回值,它和传统的函数指针相类似
函数和block区别:
1 block是OC中的语法
2 block的定义可以写在函数中
3 使用起来更直观,耦合度更低
4 直接用不用声明
//比较器
NSArray* array2 = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1,id obj2){
NSString* s1 = obj1;
NSString* s2 = obj2;
return [s1 compare:s2];
}];
NSLog(@"%@",array2);
04-Foundation-NSSet、NSDictionary、block的更多相关文章
- Foundation框架之NSArray、NSDictionary、NSSet及其Mutable类型
		
Foundation框架之NSArray.NSDictionary.NSSet及其Mutable类型 目录 概述——对Foundation框架集合类的理解 NSArray NSDictionary N ...
 - OC中Foundation框架之NSDictionary、NSMutableDictionary
		
NSDictionary概述 NSDictionary的作用类似:通过一个key ,就能找到对应的value 同样 NSDictionary是不可变的,一旦初始化完毕,里面的内容就无法修改 NSDic ...
 - 在Objective-C 中使用字符生成NSArray、NSDictionary、NSNumber
		
@符号不仅可以生成字符串,还可以生成其他数据类型如NSArray.NSDictionary和NSNumber,是一种简洁快速的用法. // NSArray array = [NSArray array ...
 - 01-Foundation简介、NSObject、copy、NSString
		
目录: 一.Foundation常用类 二.Foundation简介 三.NSObject 四.NSString 回到顶部 一.Foundation常用类 1 NSObject.NSString.NS ...
 - Objective-C 中 NULL、nil、Nil、NSNull 的定义及不同
		
本文由我们团队的 康祖彬 童鞋撰写,这是他的个人主页:https://kangzubin.cn. 理解"不存在"的概念不仅仅是一个哲学的问题,也是一个实际的问题.我们是有形宇宙的居 ...
 - OC: 数组、集合、字典
		
数组.字典.集合 参考1 参考2 参考3 参考4 参考5 NSArray * nn = @[@"元素1",@"元素2",@"元素3&quo ...
 - 数据存储(直接写入、NSUserDefaults、NSkeyedArchiver)
		
ios中常用文件存取的方法有: 1.直接写文件的方式,可以存储的对象有NSString.NSArray.NSDictionary.NSData.NSNumber,数据全部存放在一个属性列表文件(*.p ...
 - 数据存储之Archiver、Unarchiver、偏好设置
		
数组的归档 对象的归档 NSData多个对象的归档 NSArray多个对象的归档 偏好设置的存储 1.NSString.NSDictionary.NSArray.NSData.NSNumber等类型的 ...
 - 数据存储常用5种方式plist、Preference、NSCoding、SQLite3、Core Data
		
数据存储 iOS应用数据存储的常用方式 XML属性列表(plist)归档 Preference(偏好设置) NSKeyedArchiver归档(NSCoding) SQLite3 Core Data ...
 
随机推荐
- php随笔6-thinkphp OA系统  JS  实时显示当前时间
			
不多说,直入主题: JS. // JavaScript Document function showtime() { var today,hour,second,minute,year,month,d ...
 - 大神的vim配置
			
大神的vim配置,O(∩_∩)O spf13-vim : Steve Francia's Vim Distribution __ _ _____ _ ___ _ __ / _/ |___ / __ _ ...
 - The model used to open the store is incompatible with the one used to create the store
			
说什么数据不兼容,,,,这时删除模拟器的应用,,,重新启动测试.
 - 基于PCA的人脸识别步骤
			
代码下载:基于PCA(主成分分析)的人脸识别 人脸识别是一个有监督学习过程,首先利用训练集构造一个人脸模型,然后将测试集与训练集进行匹配,找到与之对应的训练集头像.最容易的方式是直接利用欧式距离计算测 ...
 - 求n^k的前缀和
			
我都已经高二了,却还不知\(1^2+2^2+3^2+4^2+...+n^2\)的通式,真是惭愧. 现在说说如何求\(n^k\)的前缀和. 如果k比较小,我们可以直接差分序列手算.否则,我们可以用神奇的 ...
 - Agg学习笔记
			
很久前就听一大牛说起Agg,据说是一个架构极度牛B的2D引擎,沉寂了许久,最后花了两周时间走马观花地把它过了一遍.果然如那大牛所言,这家伙简直就是巧夺天工的艺术品.今天稍稍瞄了一下Google扔出来的 ...
 - IOS-图片操作集合
			
编辑图片的几个方法 第一种 先用UIImage对象加载一张图片 然后转化成CGImageRef放到CGContext中去编辑 第二种 用CGImageCreate函数创建CGImageRef 然后把 ...
 - cocos2d-x 之Scene和Layer
			
***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...
 - JavaScript 高级程序设计(第3版)笔记——chapter3:基本概念(函数部分)
			
3.7函数 3.7.1 理解参数 ECMAScript 函数不介意传递进来多个参数,也不在乎传递进来的参数是什么数据类型.因为在 ECMAScript 中的参数在内部是用一个数组来表示的.在函数体内可 ...
 - ThinkPHP - 配置项目结构
			
配置项目结构: 项目如果分为前后台使用. 那么最关键的就是,使用公共部分文件的划分,其中最为核心的就是公共配置文件的使用. 下面介绍的就是怎么将前后台项目的公共部分提起出来. 首先是其他公共的文件夹: ...