iOS数组排序
iOS 数组排序
现在有下列两个数组,我们从他们开始接触数组的排序
1
2
NSArray *arrayString = @[@"20", @"30", @"8", @"10", @"9", @"88", @"66"];
NSArray *arrayNumber = @[@20, @30, @8, @10, @9, @88, @66];
1、sortedArrayUsingSelector
这个方法很简单,使用也很便捷,它返回一个排好序的数组
1
[arrayString sortedArrayUsingSelector:@selector(compare:)]; 但是当你执行打印会发现arrayString执行该方法排序后的结果是下图 
在这里我们要注意的时,它排序的时候如果对于arrayString 来说,它是按字母书序排列的,而不是按照数字大小,这个要注意, arrayNumber 这个数组则没问题,如果你想要按照自己的规则来排序,可以自己写个方法,传到@selector() 里面就行
2、sortedArrayUsingComparator
使用这个方法,我们可以在block里面写入自己定义的规则,实现起来也听方便的
1
2
3
[arrayString sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
return [obj1 integerValue] > [obj2 integerValue];
}]
3、sortedArrayUsingDescriptors & sortUsingDescriptors
前者返回一个排好序的数组,后者则是对自身进行排序,无返回值~ 哲理我们讲一下前者的方法,不多说,上代码—
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//首先我们定义一个类Person
@interface Person : NSObject
@property NSString *name;
@property NSNumber *age;
@end
@implementation Person
- (NSString *)description {
return [NSString stringWithFormat:@"name = %@, age = %@", self.name, self.age];
}
@end
//然后实例化一个Person数组
NSArray *name = @[ @"Allen", @"Kellem", @"God", @"Queen", @"King", @"Bob"];
NSArray *ages = @[@8, @20, @9, @88, @70, @20];
NSMutableArray *people = [NSMutableArray array];
//这里是一个数组的遍历方法,建议大家使用这种方法进行数组的遍历
[name enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
Person *person = [[Person alloc] init];
person.name = [name objectAtIndex:idx];
person.age = [ages objectAtIndex:idx];
[people addObject:person];
}];
// 名字进行排序,降序规则,key可以传nil,或者"self",在对如下数组排序时可用 NSArray *ages = @[@8, @20, @9, @88, @70, @20];
//再多说一句,key 这里用到的类似KVC,其中理念自己体会 =-=
NSSortDescriptor *nameSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
// 年龄进行排序,升序规则
NSSortDescriptor *ageSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:NO];
//然后使用规则进行排序,执行,打印
// 这里规则是一个数组,你可以传入多个规则,例如3
NSLog(@"By age: %@", [people sortedArrayUsingDescriptors:@[ageSortDescriptor]]);
NSLog(@"By name name: %@", [people sortedArrayUsingDescriptors:@[nameSortDescriptor]]);
NSLog(@"By name, age: %@", [people sortedArrayUsingDescriptors:@[nameSortDescriptor, ageSortDescriptor]]);
最后再体验一下其中的KVC奥妙,我们用字典来体验一下
1
2
3
4
5
6
7
8
9
NSArray *dict =@[
@{@"age":@20},
@{@"age":@5},
@{@"age":@70},
@{@"age":@33}];
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];
NSArray *arr = [dict sortedArrayUsingDescriptors:@[sort]];
NSLog(@"%@",arr);
本文由作者按照 CC BY 4.0 进行授权

