最近写东西要对数组进行一些简单的操作,在这里进行下一些总结,方便以后参考。
NSMutableArray *array1 = [[NSMutableArray alloc ]initWithObjects:
@{@"name":@"a",@"sex":@"22"},
@{@"name":@"b",@"sex":@"32"},
@{@"name":@"c",@"sex":@"25"},
@{@"name":@"d",@"sex":@"45"},
@{@"name":@"e",@"sex":@"56"},
@{@"name":@"j",@"sex":@"23"},
@{@"name":@"f",@"sex":@"67"},
@{@"name":@"h",@"sex":@"23"},
@{@"name":@"h",@"sex":@"234"},
@{@"name":@"h",@"sex":@"2345"},
@{@"name":@"h",@"sex":@"4562"},
@{@"name":@"h",@"sex":@"12312"},
@{@"name":@"h",@"sex":@"324"},
@{@"name":@"h",@"sex":@"3"},
@{@"name":@"h",@"sex":@"1"},
@{@"name":@"h",@"sex":@"67456"},
@{@"name":@"h",@"sex":@"3422"},
@{@"name":@"h",@"sex":@"23344"},
@{@"name":@"h",@"sex":@"3456"},
@{@"name":@"h",@"sex":@"82"},
nil];
这是数据源,对数组里面的字典的sex属性进行排序:
第一种方案 : 冒泡排序写俩for循环
//冒泡排序
NSDictionary *t;
for (int i = 0; i<[array1 count]-1; i++) {
for (int j =0; j<[array1 count]-i-1; j++) {
NSInteger data1 = [array1[j+1][@"sex"]intValue];
NSInteger data2 = [array1[j] [@"sex"]intValue];
if (data1 == MIN(data1, data2)) {
t = [array1 objectAtIndex:j+1];
//对数组里的数据逆序存放
[array1 exchangeObjectAtIndex:j+1 withObjectAtIndex:j];
[array1 replaceObjectAtIndex:j withObject:t];
}
}
}
冒泡对于数组里复杂的数据都可以排序,项目里我的数据是格式是 数组--->字典-->数组-->字典 根据最后字典里的某一个属性进行排序。
第二种方案 : 利用 NSSortDescriptor 类
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sex" ascending:YES];
[array1 sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
这里YES是代表升序,降序变成NO。有点要说明下,这个类这么写进行排序只是根据第一个数字去排序比如:1,32,123,23 利用他排序后的结果是 , 1,123,23,32字母也是一样。
第三种方案 : NSComparator
NSComparator cmptr = ^(id obj1, id obj2){
NSString *t1=obj1[@"sex"];
NSString *t1=obj2[@"sex"];
if ([t1 doubleValue]<[t2 doubleValue]) {
return (NSComparisonResult)NSOrderedDescending;
}
if ([t1 doubleValue]>[t2 doubleValue]) {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
};
在要适当的地方,用数组调用:
[array1 sortUsingComparator:cmptr];
备注:以上为本人浅见,如有不对之处,请各位大大们指出纠正,谢谢!!