目录:

一、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的更多相关文章

  1. Foundation框架之NSArray、NSDictionary、NSSet及其Mutable类型

    Foundation框架之NSArray.NSDictionary.NSSet及其Mutable类型 目录 概述——对Foundation框架集合类的理解 NSArray NSDictionary N ...

  2. OC中Foundation框架之NSDictionary、NSMutableDictionary

    NSDictionary概述 NSDictionary的作用类似:通过一个key ,就能找到对应的value 同样 NSDictionary是不可变的,一旦初始化完毕,里面的内容就无法修改 NSDic ...

  3. 在Objective-C 中使用字符生成NSArray、NSDictionary、NSNumber

    @符号不仅可以生成字符串,还可以生成其他数据类型如NSArray.NSDictionary和NSNumber,是一种简洁快速的用法. // NSArray array = [NSArray array ...

  4. 01-Foundation简介、NSObject、copy、NSString

    目录: 一.Foundation常用类 二.Foundation简介 三.NSObject 四.NSString 回到顶部 一.Foundation常用类 1 NSObject.NSString.NS ...

  5. Objective-C 中 NULL、nil、Nil、NSNull 的定义及不同

    本文由我们团队的 康祖彬 童鞋撰写,这是他的个人主页:https://kangzubin.cn. 理解"不存在"的概念不仅仅是一个哲学的问题,也是一个实际的问题.我们是有形宇宙的居 ...

  6. OC: 数组、集合、字典

    数组.字典.集合 参考1   参考2  参考3  参考4  参考5 NSArray * nn  = @[@"元素1",@"元素2",@"元素3&quo ...

  7. 数据存储(直接写入、NSUserDefaults、NSkeyedArchiver)

    ios中常用文件存取的方法有: 1.直接写文件的方式,可以存储的对象有NSString.NSArray.NSDictionary.NSData.NSNumber,数据全部存放在一个属性列表文件(*.p ...

  8. 数据存储之Archiver、Unarchiver、偏好设置

    数组的归档 对象的归档 NSData多个对象的归档 NSArray多个对象的归档 偏好设置的存储 1.NSString.NSDictionary.NSArray.NSData.NSNumber等类型的 ...

  9. 数据存储常用5种方式plist、Preference、NSCoding、SQLite3、Core Data

    数据存储 iOS应用数据存储的常用方式 XML属性列表(plist)归档 Preference(偏好设置) NSKeyedArchiver归档(NSCoding) SQLite3 Core Data ...

随机推荐

  1. js静态方法和实例方法

    js静态方法 function foo(){} // 声明类 foo.method = function(){} // 方法体 使用:foo.method() js实例方法 function foo( ...

  2. OD调试篇1—Hello

    OD调试篇1—Hello 要求:通过OD将程序的标题“I love fishc.com”改为“I love you” 一.找到程序的标题“I love fishc.com” 1.把程序拖到OD运行出现 ...

  3. JavaSE学习总结第08天_面向对象3

      08.01 工具类中使用静态 例: class ArrayTool { //将构造方法私有,外界不能创建该类的对象 private ArrayTool(){} //遍历数组 public stat ...

  4. Eclipse环境问题集合

    1. XDoclet错误:Missing library: xdoclet-1.2.1.jar 从http://sourceforge.net/projects/xdoclet/files/xdocl ...

  5. CentOS6.5安装Python2.7和Pip

    注:文中所写的安装过程均在CentOS6.5 x86下通过测试,安装的Python版本为2.7.12,Pip版本为8.1.2 主要参考博文:http://bicofino.io/2014/01/16/ ...

  6. javascript 检测密码强度

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. 解决ASP.NET回传后div滚动条位置复位的问题

    中心思想:用一个隐藏控件保存当前scorll值.回传回来后根据scrollTop的值,然后在Page_Load中重新设置scrollTop. 首先是为DIV添加一个 onscroll="ja ...

  8. Spring Cache抽象详解

    缓存简介 缓存,我的理解是:让数据更接近于使用者:工作机制是:先从缓存中读取数据,如果没有再从慢速设备上读取实际数据(数据也会存入缓存):缓存什么:那些经常读取且不经常修改的数据/那些昂贵(CPU/I ...

  9. 基于visual Studio2013解决C语言竞赛题之0302字符数出

     题目 解决代码及点评 根据题目要求,只要根据用户输入的字母,判断字母之后,给出相应的输出即可 在以下代码中,f32函数实现了该功能,通过if条件判断语句 #include <stdio.h ...

  10. Deep Learning论文笔记之(六)Multi-Stage多级架构分析

    Deep Learning论文笔记之(六)Multi-Stage多级架构分析 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些 ...