您的位置:首页 > 移动开发 > Objective-C

#Objective - C - sixth-Day 数组排序及集合遍历

2015-12-22 20:03 543 查看

总结

遍历:对集合中元素依次取出的过程叫做遍历。

原理:通过for循环的循环变量⽤作数组元素下标来获取不同下标的元素。

循环次数就是数组元素的个数。

数组是有序容器,因此集合中只有数组才能排序。

实际使用中可对元素进行升序降序排序方便查阅寻找

课题重点:forin循环遍历,缺点不能对指定数量遍历

数组排序

数组排序一些方法

[code]    //不可变数组NSArray排序
    //排序方法里带Array字样,代表不可变数组排序(需建新数组接收)
    NSArray *array = @[@"lanou",@"memeda",@"Lol"];
    NSArray *newarray = [array sortedArrayUsingSelector:@selector(compare:)];
    //SEL类型是方法名 @selector(方法名)
    NSLog(@"%@",newarray);

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


较少使用的排序方法(倒序使用起来较为方便)

[code]    //sortDescriptor方法
    //如果数组里元素直接可以排序,key填@"self"或nil,如果数组里元素为自定义类的对象,key填相对应的属性
    //ascending YES升序,NO降序
    NSArray *arr = @[@"lanou",@"memeda",@"Lol",@"YEs"];
    NSSortDescriptor *sortDes = [[NSSortDescriptor alloc]initWithKey:nil ascending:NO];//使用了倒序输出
    NSArray *resultArray = [arr sortedArrayUsingDescriptors:@[sortDes]];//获取排序后的元素放进数组
    for (NSString *str in resultArray) {//创建字符串遍历数组获取元素
        NSLog(@"%@",str);
    }


自定义的排序方法(实现系统的Compare)

创建类Peison

[code]//Person.h文件代码

@property(nonatomic,copy)NSString *name;//属性创建
@property(nonatomic,copy)NSString *job;
-(NSComparisonResult)compareWithName:(Person *)name;//创建类方法


[code]//Person.m文件

//自定义排序方法
-(NSComparisonResult)compareWithName:(Person *)person{
    return [self.name compare: person.name];//返回比较值
}


实现代码

[code]    Person *per = [[Person alloc]init];
    per.name =@"lixia";
    per.job = @"213";//进行赋值
    Person *per1 = [[Person alloc]init];
    per1.name = @"zhongh";
    per1.job = @"dog";//第二个人赋值
    NSArray *pers = @[per,per1];//将两人信息放入数组
    NSArray *newpers = [pers sortedArrayUsingSelector:@selector(compareWithName:)];
    //sortedArrayUsingSelector比较


集合遍历

枚举器NSEnumerator��遍历(自上而下)

[code]    //枚举器
    NSArray *array = @[@"a",@"b",@"c",@"d"];
    NSEnumerator *enumrator = [array objectEnumerator];//正序
    NSEnumerator *reverse = [array reverseObjectEnumerator];//逆序
    id value = nil;//存储数组中的元素
    while ((value = [enumrator nextObject])) { //遍历获取下一个元素
        NSLog(@"%@",value);//输出正序遍历的元素
    }
    while ((value = [reverse nextObject])) {
        NSLog(@"aha:%@",value);
    }


集合的遍历

[code]    NSSet *set = [NSSet setWithObjects:@"a",@"b",@"c", nil];//创建集合
    NSArray *object = [set allObjects];//获取所有元素
    for (int i = 0; i < [object count]; i++) {
        NSString *value = [object objectAtIndex:i];
        NSLog(@"%@",value);
    }


快速遍历

[code]    //forin方法(重点)
    NSString *new = [[NSString alloc]init];
    for (NSString *str in array) {//从上至下逐个遍历且赋值
        new = [new stringByAppendingString:str];
    }NSLog(@"%@",new);


字典遍历

[code]    NSDictionary *dic = @{@"姓名":@"momo",@"性别":@"man",@"年龄":@"18"};
    for (NSString *key in dic) {
        NSString *value = [dic objectForKey:key];//通过key获取值
        NSLog(@"%@",value);
    }


一些数组与字典相互嵌入的小练习

[code]    //字典->数组
    NSArray *arr1 = @[@"meme",@"dada",@"youyou"];
    NSDictionary *dic1 = @{@"name":arr1};
    NSLog(@"%@",dic1);

    //数组->字典
    NSDictionary *dict1 = @{@"key1":@"value1",@"key2":@"value2",@"key3":@"value3",@"key4":@"value4"};
    NSDictionary *dict2 = @{@"key1":@"value1",@"key2":@"value2",@"key3":@"value3",@"key4":@"value4"};
    NSArray *arr2 = @[dict1,dict2];
    NSLog(@"%@",arr2);

    //数组->字典->字典
    NSDictionary *dic3 = @{@"章节":@"页数"};
    NSDictionary *dic4 = @{@"书名":dic3};
    NSArray *arr3 = @[dic4];
    NSLog(@"%@",arr3);

    //数组->字典->数组
    NSArray *arr4 = @[@"watcher",@"walker",@"celtic"];
    NSArray *arr5 = @[@"d",@"c",@"b",@"a"];
    NSArray *arr7 = @[@"laker",@"heat"];
    NSDictionary *dic5 = @{@"dictionary":arr4,@"letter":arr5,@"NBAteam":arr7};
    NSArray *arr6 = @[dic5];
    NSLog(@"%@",arr6);


冬至小年快乐

南方有个说法叫做冬至大年

虽然我是没有感觉出来,不过也许是因为比起新年更容易的团员聚在一起才显得传统的更重要吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: