iOS数组排序

iOS 数组排序

现在有下列两个数组,我们从他们开始接触数组的排序

1
2
NSArray *arrayString = @[@"20", @"30", @"8", @"10", @"9", @"88", @"66"];
NSArray *arrayNumber = @[@20, @30, @8, @10, @9, @88, @66];

1、sortedArrayUsingSelector

这个方法很简单,使用也很便捷,它返回一个排好序的数组

[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
//首先我们定义一个类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);


-------------The End-------------

本文标题:iOS数组排序

文章作者:kysonyangs

发布时间:2015年10月24日 - 15:10

最后更新:2018年11月05日 - 15:11

原始链接:https://kysonyangs.github.io/default/iOS数组排序/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。