zoukankan      html  css  js  c++  java
  • OC 遍历及排序

    //  main.m
    
    #import <Foundation/Foundation.h>
    #import "person.h"
    
    int main(int argc, const char * argv[]) {
        
        //数组遍历
        //原理:通过for循环的循环变量⽤用作数组元素下标来获取不同下标的 元素。
       // 循环次数就是数组元素的个数。:
    //    NSArray *cityarray=[NSArray arrayWithObjects:@"北京",@"河北",@"山西",@"山东",@"河南", nil];
    //    //字典:
    //    NSDictionary *nsdic=[NSDictionary dictionaryWithObjectsAndKeys:@"张三",@"name",@"18",@"age",@"吃饭",@"hobby", nil];
    //    
    //    //集合:
    //    NSSet *string=[NSSet setWithObjects:@"123",@"345",@"2356",@"789", nil];
    //    
        
    //    //原理:通过for循环的循环变量⽤用作数组元素下标来获取不同下标的 元素。
    //    //循环次数就是数组元素的个数。
    //    
    //    
    //    for (int i=0; i<cityarray.count; i++) {
    //        //根据下标从数组中取出对应下标的元素
    //        NSString *string=[cityarray objectAtIndex:i];
    //        
    //        NSLog(@"[%d]:%@",i,string);
    //    }
    //    
    //    
    //    //字典遍历
    //    //原理:先获取字典中所有的key,存储到数组中,遍历数组依次取 出每⼀一个key,然后根据key从字典中取出对应的value。 字典取值要通过key取出对应的value。 循环次数等于字典的元素个数。
    //    
    //    
    //    NSArray *keys=[nsdic  allKeys];//取出nsdic当中所有的key值(存储到数组当中)
    //    
    //    for (int i=0; i<keys.count; i++) {
    //        //通过数组元素下标 取出对应的key
    //        NSString *key=[ keys objectAtIndex:i];
    //        //在通过key取出对应的value
    //        NSLog(@"%@:%@",key, [nsdic objectForKey:key]);
    //    
    //        
    //    }
    //    
    //    
    //    //集合:
    //   // 原理: ⽤用集合的allObject属性先取到集合的所有元素存储到数组
    //  
    //    //中,再通过for循环的循环变量⽤用作下标来取到每个元素。
    //    
    //    
    //    NSArray *setobject=[string allObjects];
    //    for (int i=0; i<setobject.count; i++) {
    //        //从集合的allObjects(allObjects数组)中获取对应下标搜对应的元素,并输出
    //        
    //        NSLog(@"%@",[setobject objectAtIndex:i]);
    //        
    //        
    //    }
        
        
        /*使⽤用for循环完成:
        定义⼀一个数组, 包含5个字符串对象, 倒序取出数组中所 有元素, 并存储到另⼀一可变数组中。
        */
        
    //    
    //    NSArray *arr=[NSArray arrayWithObjects:@"aa",@"bb",@"cc",@"dd",@"ee", nil];
    //    
    //    NSMutableArray *array=[NSMutableArray arrayWithCapacity:0];
    //    int j=0;
    //    for (NSInteger i=arr.count-1; i<arr.count; i--) {
    //        
    //        array[j]=arr[i];
    //        j++;
    //    }
    //    
    //    NSLog(@"%@",array);
    //    
    //    
    //    
        
        
        
       /*
        使⽤用for循环完成:
        定义⼀一个字典, ⽤用于存储⼀一个⼈人的name, sex, age三个数 据, 完成对其三个数据的输出。
        
        */
        
    //   
    //    NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys:@"zhngsan",@"name",@"18",@"age",@"nan",@"sex", nil];
    //    
    //    NSArray *keys=[dic allKeys];
    //
    //    for (int i=0; i<keys.count; i++) {
    //        
    //        NSString *arr1=[keys objectAtIndex:i];
    //        
    //        NSLog(@"%@",[dic objectForKey:arr1]);
    //    }
    //    
    //    
        
         // NSEnumerator
       // NSEnumerator--数组-正序遍历
        
    //    NSEnumerator *array1=[cityarray objectEnumerator];
    //    
    //    id value=nil;//存储数组中的元素对象
    //    while ((value =[array1 nextObject])) {
    //        NSLog(@"%@",value);
    //    }
    //    
        
    //    //数组---倒序遍历
    //    NSEnumerator *arrayreverseenume=[cityarray reverseObjectEnumerator];
    //    id value=nil;
    //    
    //    while ((value =[arrayreverseenume nextObject])) {
    //              NSLog(@"%@",value);
    //         }
    //    
    //    
    //    
    //    
    //   // NSEnumerator   字典
    //    
    //    
    //    NSEnumerator *dict=[nsdic objectEnumerator];
    //    id dicte=nil;
    //    while (dicte =[dict nextObject]) {
    //        NSLog(@"%@",dicte);
    //    }
    //    
    //    
    //    
    //    //NSEnumerator 数组
    //    
    //    NSEnumerator *setenum=[string objectEnumerator];
    //    id setvalue=nil;
    //    while (setvalue =[setenum nextObject]) {
    //        NSLog(@"%@",setvalue);
    //    }
        
        /*
         NSEnumerator:遍历数组每个索引处的对象,而NSEnumerator用来描述这种集合迭代的运算方式
         通过objectEnumerator向数组请求枚举器,如果想从后向前浏览(打印),可以使用reverseObjectEnumerator  方法在活得枚举器后,开始一个while循环,每次循环都向这个枚举器请求它下一个对象 nextobject   nextobject返回nil值时代表循环结束
         注意:不可以对可变数组进行一个增加或者删除的操作.因为默认的枚举器不可以改变的.
      
         */
        
        
        
        //for...in  遍历
        
    //    //数组遍历
    //    for (NSString *citystring in cityarray) {
    //        NSLog(@"%@",citystring);
    //    }
    //    
    //    //字典
    //    for (NSString *key in nsdic) {
    //        
    //        NSLog(@"%@:%@",key, [nsdic objectForKey:key]);
    //    }
    //    
    //    //集合
    //    for (NSString *str in string) {
    //        NSLog(@"%@",str);
    //    }
    //    
        
        
        /*
         数组排序:因为在我们集合类中只有数组中的元素是有序排列,而字典集合排序是无序的所以只能对数组进行排序
         
         */
        
    //    
    //    NSArray *string1=[NSArray arrayWithObjects:@"zhangsan",@"lisi",@"wangwu",@"zhaoliu", nil];
    //    NSMutableArray *string2=[NSMutableArray arrayWithObjects:@"zhangsan",@"lisi",@"wangwu",@"zhaoliu",@"huba", nil];
    //    
        /*使用NSSortDescriptor(排序描述)
         它由一下参数组成:
         键:对于一个给定的集合对应值得键位将对集合中的每个对象排序;
         
         升序:指定一个集合是否按照升序(YES)还是降序(NO)进行排序的布尔值.
        
        */
    
        //@"self"代表的是直接可以进行排序的,如果选择对一个类的属性进行一个排序,那么我们就直接放@"属性名"即可,后面的yes 代表的升序 no代表的是降序
    //    NSSortDescriptor *stringSortDescriptor=[[NSSortDescriptor alloc]initWithKey:@"self" ascending:NO ];
    //    //不可变数组
    //    //根据排序的描述符,对数组进行排序
    //    NSArray *sortedstringarray=[arr sortedArrayUsingDescriptors:[NSArray arrayWithObjects:stringSortDescriptor, nil] ];
    //    NSLog(@"%@",sortedstringarray);
    //    
    //    //可变数组
    //    [arr1 sortUsingDescriptors:[NSArray arrayWithObjects:stringSortDescriptor, nil]];
    //    NSLog(@"%@",arr1);
    //    
        
        //使用数组排序方法,传入数组中的两个元素比较的方法名
        //不可变数组
        //@selector:  方法选择器
        //compare: 默认是一个升序的排序
    //    NSArray *sortedarray=[string1 sortedArrayUsingSelector:@selector(compare:) ];
    //    NSLog(@"%@",sortedarray);
    //    
    //    
    //    //可变数组
    //    [string2 sortUsingSelector:@selector(compare:)];
    //    NSLog(@"%@",string2
    //          );
    //    
        
        //数组排序   数组中存放自定义类对象的排序
        
             person *per1=[[person alloc]initWithName:@"zhangli" sex:@"m" age:30];
        
            person *per2=[[person alloc]initWithName:@"lizi" sex:@"f" age:22];
        
             person *per3=[[person alloc]initWithName:@"zhaowu" sex:@"f" age:13];
        
             person *per4=[[person alloc]initWithName:@"hanqi" sex:@"m" age:33];
        
             person *per5=[[person alloc]initWithName:@"liuba" sex:@"m" age:40];
             person *per6=[[person alloc]initWithName:@"hujiu" sex:@"m" age:7];
        
             person *per7=[[person alloc]initWithName:@"guojing" sex:@"f" age:88];
        
        //根据生成的对象生成数组
        
        NSArray *personall=[NSArray arrayWithObjects:per1,per2,per3,per4,per5,per6,per7, nil];
        
        //生成初始化排序的描述---按人的姓名进行一个排序
    //    NSSortDescriptor *sortwithname=[[NSSortDescriptor alloc]initWithKey:@"name" ascending:YES];
    //    //通过排序描述对数组进行排序,生成新的排序后的数组
    //    NSArray *sortedarray=[personall sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sortwithname, nil]];
    //    NSLog(@"%@",sortedarray);
    //
        
        
    //  //生成初始化排序的描述---按人的年龄进行一个排序
    //    NSSortDescriptor *sortwithage=[[NSSortDescriptor alloc]initWithKey:@"age" ascending:YES];
    //      //通过排序描述对数组进行排序,生成新的排序后的数组
    //    NSArray *sortedarray1=[personall sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sortwithage, nil]];
    //    NSLog(@"%@",sortedarray1);
    //    
    
        
        
        
        NSMutableArray *marray=[personall mutableCopy];
        NSLog(@"%@",marray);
        
        
        //可变数组排序:
        //生成初始化排序描述---按姓名降序
    //    NSSortDescriptor *marrayname=[[NSSortDescriptor alloc]initWithKey:@"name" ascending:YES];
    //    //通过排序描述符对数组进行排序,生成新的排序后的数组
    //    [marray sortUsingDescriptors:[NSArray arrayWithObjects:marrayname, nil]];
    //    NSLog(@"%@",marray);
    //    
    //    
    //    
    //    //按年龄降序
    //    NSSortDescriptor *marrayage=[[NSSortDescriptor alloc]initWithKey:@"age" ascending:NO];
    //    //通过排序描述符对数组进行排序,生成新的排序后的数组
    //    [marray sortUsingDescriptors:[NSArray arrayWithObjects:marrayage, nil]];
    //    NSLog(@"%@",marray);
    
    
        NSArray *resultwithnamearray=[personall sortedArrayUsingSelector:@selector(compareByName:)];
        
        NSLog(@"%@",resultwithnamearray);
    
       
        return 0;
    }
    //  person.h
    
    #import <Foundation/Foundation.h>
    
    @interface person : NSObject
    {
    
        NSString *_name;
        NSString *_sex;
        int _age;
    
    }
    -(void)setName:(NSString *)name;
    -(NSString *)name;
    -(void)setSex:(NSString *)sex;
    -(NSString *)sex;
    -(void)setAge:(int)age;
    -(int)age;
    
    
    -(instancetype)initWithName:(NSString*)name
                            sex:(NSString *)sex
                            age:(int)age;
    +(instancetype)personWithName:(NSString*)name
                              sex:(NSString *)sex
                              age:(int)age;
    //比较两个人的年龄---升序
    -(NSComparisonResult)compareByAge:(person *)person;
    
    //降序
    -(NSComparisonResult)compareByName:(person *)person;
    
    
    @end
    //person.m
    
    #import "person.h"
    
     @implementation person
    
    -(void)setName:(NSString *)name{
    
        _name=name;
        
    }
    -(NSString *)name
    {
    
        return _name;
    }
    -(void)setSex:(NSString *)sex{
    
        _sex=sex;
        
    }
    -(NSString *)sex{
        return _name;
    }
    -(void)setAge:(int)age{
    
        _age=age;
    }
    -(int)age{
    
        return _age;
    }
    
    
    -(instancetype)initWithName:(NSString*)name
                            sex:(NSString *)sex
                            age:(int)age{
    
        self=[super init];
        if (self) {
            _name=name;
            _sex=sex;
            _age=age;
        }
        return self;
    
    }
    +(instancetype)personWithName:(NSString*)name
                              sex:(NSString *)sex
                              age:(int)age{
    
    
        person *per=[[person alloc]initWithName:name sex:sex age:age];
        return per;
    
    }
    //比较两个人的年龄---升序
    -(NSComparisonResult)compareByAge:(person *)person{
    //当条件表达式成立之后,我们的排序结果是看我们的返回值,返回值是-1,代表的是降序,1代表的升序
        
        
        
        if ( self.age>person.age) {
            return  NSOrderedAscending;//-1
        }else  if(self.age<person.age){
     
            return NSOrderedDescending;//1
        }else{
            return NSOrderedSame;
        
        }
    
        
    
    }
    
    //降序
    -(NSComparisonResult)compareByName:(person *)person{
    
    
    
        
        //compare:默认是升序排序,如果想要降序那么加-(符号)
        
        return -[self.name compare:person.name];
        
    }
    
    
    //重写父类的description方法:它的返回值是oc的字符串
    -(NSString *)description
    {
    
    
        return [NSString stringWithFormat:@"name:%@,sex:%@,age:%d",_name,_sex,_age];
    
    
    
    }
    
    
    @end
  • 相关阅读:
    运算符的方向--好神奇
    a++ 和 ++a ;
    c语言中!和~的区别
    函数的参数,参数为数组
    反射的理解
    ThreadLocal类
    多线程面试题-sleep()和wait()区别
    话题1-关键字
    实现多线程的另一种方式-Callable
    线程池
  • 原文地址:https://www.cnblogs.com/huyibo/p/5475339.html
Copyright © 2011-2022 走看看