❀自我唠嗑OC-集合遍历和数组排序

遍历
集合指的是OC中提供的容器类,即数组,字典,集合. 对集合中元素依次取出的过程叫做遍历.
遍历三种方式分别为:for循环遍历;NSEnumerator遍历;for…in遍历
/———————-for循环遍历———————-/
1.数组遍历
⚠️通过for循环的循环变量用作数组元素下标来获取不同下标的元素,数组元素个数为循环次数

   NSArray *array = @[@"one",@"two",@"three",@"four"];
    for (NSUInteger i = 0; i < [array count]; i++) {
        NSString *value = [array objectAtIndex:i];
        NSLog(@"value:%@",value);
    }

2.字典遍历
⚠️先获取字典中所有key,存储到数组中,遍历数组依次取出每个key,然后根据key从字典中取出对应的value.字典元素个数为循环次数

NSDictionary *dictionary = @{@"key":@"apple",@"key1":@"banana",@"key2":@"pear",@"key3":@"grape"};

    NSArray *keys = [dictionary allKeys];
    for (NSUInteger i = 0; i < [keys count]; i++) {
        NSString *key = [keys objectAtIndex:i];
        NSString *value = [dictionary objectForKey:key];
        NSLog(@"value:%@",value);
    }

3.集合遍历
⚠️用集合的allObjects属性先取到集合的所有元素存储到数组中,再通过for循环的循环变量用作下标来取到每个元素

NSSet *set = [NSSet setWithObjects:@"red",@"yellow",@"black",@"blue",@"green", nil];
    NSArray *objects = [set allObjects];
    for (NSUInteger i = 0; i < [objects count]; i++) {
        NSString *value = [objects objectAtIndex:i];
        NSLog(@"%@",value);
    }

上标⚠️为for循环遍历步骤,易懂,运用频繁,重要.

/———————-NSEnumerator遍历———————-/
枚举器,遍历集合中的元素。
依附于集合类(NSArray,NSSet,NSDictionary),没有用来创建实例的接口.
NSEnumerator的nextObject方法可以遍历每个集合元素,结束返回nil,通过与while结合使用可遍历集合中所有元素。
对可变集合进行枚举操作时,不能通过添加或删除对象这类方式来改变集合容器的元素个数。
1.数组正反序枚举遍历

NSArray *array1 = @[@"one",@"two",@"three",@"four"];
    NSEnumerator *enumerator = [array1 objectEnumerator];//正序的枚举器对象
    //NSEnumerator *enumerator = [array1 reverseObjectEnumerator];//反序
    id value = nil;//存储数组中元素
    while ((value = [enumerator nextObject])) {
        NSLog(@"%@",value);
    }

2.字典枚举遍历

 NSDictionary *dictionary1 = @{@"key":@"apple",@"key1":@"apple",@"key2":@"pear",@"key3":@"grape"};
    NSEnumerator *enumerator1 = [dictionary1 objectEnumerator];
    id value1 = nil;//存储字典中的元素
    while ((value1 = [enumerator1 nextObject])) {
        NSLog(@"%@",value1);
    }

3.集合枚举遍历

NSSet *set1 = [NSSet setWithObjects:@"red",@"yellow",@"black",@"blue",@"green", nil];
    NSEnumerator *enumerator2 = [set1 objectEnumerator];//获取枚举器对象
    id value2 = nil;//存储集合中的元素
    while ((value2 = [enumerator2 nextObject])) {
        NSLog(@"%@",value2);
    }

⚠️字典和集合中存储的元素是无序的,因此没有反向枚举的概念

/———————–for..in遍历———————-/
快速枚举,在NSEnumerator的基础上封装的更加方便的快速遍历集合元素方式.
格式:for(集合中对象类型 *元素名 in 被遍的集合){语句};
1.数组快速遍历
⚠️遍历直接得到数组中的每个元素

NSArray *array2 = @[@"one",@"two",@"three",@"four"];
    for (NSString *string in array2) {
        NSLog(@"%@",string);
    }

2.字典快速遍历
⚠️遍历得到字典中的key,然后通过key从字典中获取对应value对象

NSDictionary *dictionary2 = @{@"key":@"apple",@"key1":@"apple",@"key2":@"pear",@"key3":@"grape"};

    for (NSString *key in dictionary2) {
        NSString *value = [dictionary2 valueForKey:key];
        NSLog(@"%@",value);
    }

3.集合快速遍历
⚠️遍历直接得到集合中每个元素

NSSet *set2 = [NSSet setWithObjects:@"red",@"yellow",@"black",@"blue",@"green", nil];
    for (NSString *string in set2) {
        NSLog(@"%@",string);
    }

小拓展:数组与字典间的包含

    //字典->数组
    NSArray *array3 = @[@"one",@"two",@"three",@"four"];
    for (NSDictionary *dic in array3) {
        NSLog(@"%@",dic);
    }
    //数组->字典
    NSDictionary *dictionary3 = @{@"key":@"apple",@"key1":@"melon",@"key2":@"pear",@"key3":@"grape"};
    for (NSString *key in dictionary3) {
        NSArray *value = [dictionary3 valueForKey:key];
        NSLog(@"%@",value);
    }

    //数组->字典->字典
    NSDictionary *dictionary4 = @{@"key":@"apple",@"key1":@"melon",@"key2":@"pear",@"key3":@"grape"};
    NSDictionary *dictionary5 = @{@"key":dictionary4};
    for (NSString *key in dictionary5) {
        NSArray *value = [dictionary5 valueForKey:key];
        NSLog(@"%@",value);
    }
    //数组->字典->数组
    NSArray *array4 = @[@"one",@"two",@"three",@"four"];
    NSDictionary *dictionary6 = @{@"key":array4};
    for (NSString *key in dictionary6) {
        NSArray *value = [dictionary6 valueForKey:key];
        NSLog(@"%@",value);
    }

数组排序

//SEL类型为方法名
    //@selector(方法名)
    //排序方法带array字样,代表不可变数组
    NSArray *arr5 = [NSArray arrayWithObjects:@"c",@"x",@"z",@"a", nil];
    NSArray *newArray = [arr5 sortedArrayUsingSelector:@selector(compare:)];
    NSLog(@"排序后:%@",newArray);

    //可变数组的排序直接对原数组进行操作,不需要有返回值,方法名不带array字样
    NSMutableArray *Muarray = [[NSMutableArray alloc]init];
    [Muarray addObject:@"hello"];
    [Muarray addObject:@"kugou"];
    [Muarray sortedArrayUsingSelector:@selector(compare:)];



    //sortDescriptor排序,如果数组里元素直接可以排序,key填@"self"或nil,如果数组里元素为自定义类的对象,key填相对应的属性
    //ascending YES升序 NO降序
    NSSortDescriptor *sortDes = [[NSSortDescriptor alloc]initWithKey:nil ascending:YES];
    NSArray *resultArray = [arr5 sortedArrayUsingDescriptors:@[sortDes]];
    for (NSString *str in resultArray) {
        NSLog(@"%@",str);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值