zoukankan      html  css  js  c++  java
  • 04-Foundation-NSSet、NSDictionary、block

    目录:

    一、NSSet集合

    二、NSDictionary字典

    三、block代码块

    回到顶部

    一、NSSet集合

    1 NSSet是一个无序的,管理对个对象的集合类,最大特点是集合中不允许出现重复对象,和数学上的集合含义是一样的。除了无序,不许重复,其他功能和NSArray是一样的。

    2 什么叫重复?

    * 同一个对象

    * 两个对象信息值一样

    计算机认为的一样是:同一个对象

    3 对象的哈希值(hash)

    * set中确定对象是否是重复的?例如A对象和B对象,先调用A对象的hash方法得到一个整数,在调用B对象的hash方法得到一个整数,如果整数不相同,计算机就认为两个对象是不同的对象(没有重复)

    * 因为计算机认为同一个对象才是重复的,而不同对象相同值是不能判断的,所有我们要重写hash方法来判断里面的值是否相同,如果hash值相同此时会再次调用对象的isEqual方法,再次判断两个对象是否相同。

     1 -(BOOL)isEqual:(id)object{
     2 
     3     NSLog(@"isEqual执行了");
     4 
     5     //判断类型
     6 
     7     //判断对象是否是同一对象
     8 
     9     if (self == object) {
    10 
    11         return YES;
    12 
    13     }else if([object isMemberOfClass:[Student class]]){
    14 
    15         //判断对象中每一个属性的值
    16 
    17         Student* stu2 = object;
    18 
    19         if ([self.name isEqualToString:stu2.name]){
    20 
    21             return YES;
    22 
    23         }else{
    24 
    25             return NO;
    26 
    27         }
    28 
    29     }else{
    30 
    31         return NO;
    32 
    33     }
    34 
    35 }

    练习:创建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 可以保存多条数据

     1 // 初始化
     2         NSDictionary* dic = [NSDictionary dictionaryWithObjectsAndKeys:@"v1",@"k1",@"v2",@"k2",@"v3",@"k3", nil];//1值2键3值4键...如果键名相同了只保存第一个键的值
     3         NSLog(@"%@",dic);
     4         
     5         NSMutableDictionary* dic2 = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"v1",@"k1",@"v2",@"k2",@"v3",@"k3", nil];//1值2键3值4键...如果键名相同了只保存第一个键的值
     6         //添加键值对
     7         [dic2 setValue:@"v4" forKey:@"k4"];
     8         NSLog(@"%@",dic2);
     9         //通过健查找值
    10         NSString* value = [dic2 objectForKey:@"k1"];
    11         NSLog(@"key:%@->value:%@",@"k1",value);
    12         //遍历
    13         //得到所有的key
    14         NSArray* keys = [dic2 allKeys];
    15         //通过对key排序来搞定对字典的排序
    16         NSArray* newKeys = [keys sortedArrayUsingSelector:@selector(compare:)];
    17         for (NSString* k in newKeys) {
    18             NSLog(@"%@->%@",k,[dic2 objectForKey:k]);
    19         }

    回到顶部

    三、block代码块

    1 block封装一段代码,可以在任何时候执行,block可以做为函数参数或函数的返回值,而本身又可以带输入参数或返回值,它和传统的函数指针相类似

    函数和block区别:

    1 block是OC中的语法

    2 block的定义可以写在函数中

    3 使用起来更直观,耦合度更低

    4 直接用不用声明

    1 //比较器
    2         NSArray* array2 = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1,id obj2){
    3             NSString* s1 = obj1;
    4             NSString* s2 = obj2;
    5             return [s1 compare:s2];
    6         }];
    7         NSLog(@"%@",array2);
  • 相关阅读:
    当再多大公司慢慢的放弃微软的技术时, 不知大家怎想?
    【叶子函数分享五十四】汉字转拼音函数 [转]
    java_easyui体系之DataGrid(4)[转]
    java_easyui体系之DataGrid(3)[转]
    java_easyui体系之DataGrid(2)[转]
    java_easyui体系之DataGrid(1)[转]
    java_easyui体系之目录 [转]
    Java 并发和多线程(三) 多线程的代价 [转]
    Java 并发和多线程(二) 多线程的优点 [转]
    Java 并发和多线程(一) Java并发性和多线程介绍[转]
  • 原文地址:https://www.cnblogs.com/yangmx/p/3495650.html
Copyright © 2011-2022 走看看