• 【Objective-C学习记录】第二十四天


    集合的遍历

    1.for循环遍历

    2.枚举器遍历

    1 NSArray *enumArray = @[@"CM", @"PL", @"Lina", @"NEC"];
    2 //创建一个枚举器,依附于数组
    3 NSEnumerator *rator = [enumArray objectEnumerator];
    4 //创建一个对象
    5 id object = nil;
    6 while (object = [rator nextObject])
    7 {
    8     NSLog(@"%@", object);
    9 }

    也可以反向枚举

    1 //反向枚举
    2     NSEnumerator *reverseRator = [enumArray reverseObjectEnumerator];
    3     while (object = [reverseRator nextObject])
    4     {
    5         NSLog(@"%@", object);
    6     }

    利用枚举器遍历字典

    1     rator = [dict objectEnumerator];
    2     while (object = [rator nextObject])
    3     {
    4         NSLog(@"%@", object);
    5     }

    3.forin循环

    forin其实是基于枚举器遍历进行的一次封装,结构为:

    for ( type *object in collection)

    {

           statements

    }

    其中collection是需要遍历的容器,object指代collection每一次遍历的元素,如果collection里的对象都是同一类型,那么object的类型可以指定,statements为循环体。比如:

    1 for (NSString *str in array)
    2 {
    3      NSLog("%@", str);  
    4 }

    集合的排序

    1.NSSortDescriptor

    
    
    1 /**
    2 *  使用NSSortDescriptor进行数组排序有三步
    3 *  1.创建一个用来排序的数组
    4 *  2.创建一个排序条件,初始化中需要指定按照数组中对象的什么属性值排序,升序或者降序
    5 *  3.数组根据排序条件进行排序,得到一个排序之后的数组(如果是可变数组,不会生成新数组,还是本身)
    6 */
    1 NSArray *array = @[@"PA", @"AM", @"Luna", @"DR", @"MED"];
    2 NSSortDescriptor *des = [[NSSortDescriptor alloc] initWithKey:@"self" ascending:YES];
    3 NSLog(@"%@", [array sortedArrayUsingDescriptors:@[des]]);

    首先初始化一个NSSortDescriptor对象,初始化方法initWithKey:有两个参数。第一个代表根据什么排序,在这里使用array自身,即对array内的元素进行排序,如果array里的每个元素都是一个对象,而这个对象有某个属性,这时就可以将属性名作为参数,即可根据属性名进行排序;第二个参数表示升序或者降序。

    2.sortedArrayUsingSelector:@selector()

    1 NSArray *newArray = [array sortedArrayUsingSelector:@selector(compare:)];
    2 NSLog(@"%@", newArray);  

    在@selector里填写方法名,类似C语言里的函数指针,并且方法需要是如下结构

    - (NSComparisionResult) 方法名:参数

    这个方法是指定根据什么规则进行排序。比如这里传入的是系统方法compare:。compare方法的返回值就是NSComparisionResult类型的,而这种方式默认是升序排列,如果想进行降序排序的话,可以这样去定义一个方法:

     1 - (NSComparisonResult)compareDescending:(NSString *)str
     2 {
     3     NSComparisonResult result = [self compare:str];
     4     if (result < 0)
     5     {
     6         return 1;
     7     }
     8     else if (result > 0)
     9     {
    10         return -1;
    11     }
    12     else
    13     {
    14         return 0;
    15     }      
    16 }

    并把该方法名compareDescending:作为@selector的参数即可完成降序排序。

  • 相关阅读:
    [转]进程与线程及其区别
    [转]工厂模式
    [转]Filter实现处理中文乱码,转义html标签,过滤敏感词
    [转]JAVA设计模式之单例模式
    [转]Servlet 中文乱码问题及解决方案剖析
    Servlet作业2-将表单提交的商品信息输出到页面中
    Servlet作业1-实现注册登录
    [转] ServletContext 与application的异同
    [转]servlet中的service, doGet, doPost方法的区别和联系
    [转]Servlet 3.0 新特性详解
  • 原文地址:https://www.cnblogs.com/shvier/p/5077159.html
Copyright © 2020-2023  润新知