OC05 for_in快速遍历技术

来源:互联网 发布:nfc读卡软件 编辑:程序博客网 时间:2024/05/20 09:08

//  Person.h

#import <Foundation/Foundation.h>


@interface Person :NSObject

{

   NSString *_name;

   int _age;

}


- (instancetype)initWithName: (NSString *)name

                         age: (int)age;




-(NSString *)name;

-(int)age;



// 声明

- (NSComparisonResult)compareWithNameDown:(Person *)person;





@end



//  Person.m

#import "Person.h"


@implementation Person


- (instancetype)initWithName: (NSString *)name

                         age: (int)age{

   if ([superinit]) {

       _name = name;

       _age = age;

    }

    return self;

}




-(NSString *)name{

   return_name;

    

}

-(int)age{

   return_age;

    

}



// 伪程序欺骗系统,实现

- (NSComparisonResult)compareWithNameDown:(Person *)person{

    

   if ( [_namecompare:[personname]] == -1 ) {

        returnNSOrderedDescending;

    }elseif ([_namecompare:[person name]] ==1){

        returnNSOrderedAscending;

    }else

        returnNSOrderedSame;

    

}




@end



//  main.m

#import <Foundation/Foundation.h>

#import "Person.h"


int main(int argc,const char * argv[]) {

    

#pragma mark -快速遍历

 

    

   /*

     1、数组、字典、集合都可以使用for循环,根据元素个数获取到所有的对象。

     2Coaoa框架提供了一种快速遍历的方式:for...in...,不需要知道元素个数,照样可以获取到全部元素

     */

   /*

    #pragma mark --使用for...in...快速遍历数组

    // 创建一个数组

    NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"4",@5,@5.12, nil];

    for (id obj in array) {

        NSLog(@"%@", obj);

    }

    

    

    #pragma mark --使用for...in...快速遍历字典

    NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"apple",@"fruit",@"man",@"person",@"meiHua",@"flowers", nil];

    

    // 使用for...in...遍历字典,取出的是key值,我们还需要根据key获得value

    for (id obj1 in dic) {

        NSLog(@"%@", [dic objectForKey: obj1]);

    }

    

    

    

    #pragma mark --使用for...in...快速遍历集合

    NSSet *set = [NSSet setWithObjects:@"1",@"2",@"3",@"4",@"9", nil];

    

    for (id obj2 in set) {

        NSLog(@"%@", obj2);

    }

    

    */

    

    #pragma mark --不能使用for...in...添加、删除元素

   NSMutableArray *mArray = [NSMutableArrayarrayWithObjects:@"1",@"2", @"3",@"4", nil];

    //for循环中我们可以动态添加、删除元素

   for (int i =0; i < [mArray count]; i++) {

        [mArrayremoveLastObject];

       NSLog(@"%@", mArray);

    }

    

    //在快速遍历过程中,不能修改元素(特别是元素的个数)

//    for (id obj3 in mArray) {

//        [mArray removeLastObject]; // 错误的用法

//    }

    

    

    

#pragma mark -数组排序

    

    #pragma mark --使用冒泡法,给OC数组排序

   NSArray *ocArray = [NSArrayarrayWithObjects:@1,@2,@3,@4,nil];

   NSMutableArray *mocArray = [NSMutableArrayarrayWithArray:ocArray]; // 将不可变数组转换成可变数组

    

   for (int i =0; i < [mocArray count]; i++) {

       for (int j =0; j < [mocArray count] - i -1; j++) {

           if ([[mocArray objectAtIndex:j]intValue] > [[mocArray objectAtIndex:j+1] intValue]) {//

                

                //使用字符串的交换元素位置方法,来交换元素。

                [mocArray exchangeObjectAtIndex:jwithObjectAtIndex:j+1];


                

            }

        }

    }

    

   NSLog(@"%@",mocArray);


    

    

    

    #pragma mark --使用Selector方法选择器给OC数组排序

    //sortUsingSelector:      sortedArrayUsingSelector:

   NSArray *ocArray1 = [NSArrayarrayWithObjects:@"d",@"e",@"a",@"z",nil];

   NSMutableArray *mArray1 = [NSMutableArrayarrayWithArray:ocArray1];

    

    // SEL :这种类型的参数,表示参数是一个方法名,需要用@selector()来选择指定的方法作为参数

    // SEL :OC中的一种方法选择器,他可以用来绑定方法名。得到的是方法的唯一标示符

    

    // sortUsingSelector:是可变数组的排序方法,在原数组基础上进行排序   (默认升序)

//    [mArray1 sortUsingSelector:@selector(compare:)];

//    NSLog(@"%@",mArray1);

    

    // sortedArrayUsingSelector:可变数组和不可变数组都可以使用,该方法不在原数组的基础上修改,而是将排好序的数组元素作为一个新的数组返回 (默认升序)

    // person.m实现降序方法可参照!!!

   NSArray *sorted = [mArray1 sortedArrayUsingSelector:@selector(compare:)];//compare:

   NSLog(@"%@",sorted);

    

    

    

    

    

    // 综合练习题

   Person *person1 = [[Personalloc] initWithName:@"aaa"age:23];

   Person *person2 = [[Personalloc] initWithName:@"ddd"age:12];

   Person *person3 = [[Personalloc] initWithName:@"cc"age:1];

   Person *person4 = [[Personalloc] initWithName:@"eee"age:12];

    

   NSMutableArray *mutabArray = [NSMutableArrayarrayWithObjects:person1, person2, person3, person4,nil];

    

    //按照姓名降序排列

    [mutabArraysortUsingSelector:@selector(compareWithNameDown:)];

    

   for (id objin mutabArray) {

       NSLog(@"%@", [objname]);

    }

    

    

   return 0;

}




0 0