用Block对数组进行排序

 

  • 不可变数组的方法:
- (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr
  • 可变数组的方法 :
- (void)sortUsingComparator:(NSComparator)cmptr

NSComparator是利用typedef定义的Block类型

typedef NSComparisonResult (^NSComparator)(id obj1, id obj2);

这个返回值为NSComparisonResult枚举, 用来决定Block的两个参数顺序,需要我们在Block中指明不同条件下Block的两个参数的顺序即可, 数组中的元素就会按照设定的顺序进行排列

typedef NS_ENUM(NSInteger, NSComparisonResult)
{
NSOrderedAscending = -1L, // 升序,表示左侧的字符在右侧的字符前边
 NSOrderedSame, // 相等
 NSOrderedDescending // 降序,表示左侧的字符在右侧的字符后边
};

例如对Person类以年龄大小进行排序


Person *p1 = [[Person alloc] init];
p1.age = 18;
Person *p2 = [[Person alloc] init];
p2.age = 28;
Person *p2 = [[Person alloc] init];
p3.age = 11;       
NSArray *array = @[p1,p1,p2];        
array = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
Person *p1 = obj1;
Person *p2 = obj2;        
if (p1.age > p2.age)
{
return NSOrderedDescending; // 指定为降序,obj1排在obj2的后边
}
else if (p1.age < p2.age)
{
return NSOrderedAscending;
}
else
{
return NSOrderedSame;
}
}];

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值