数组排序:对象数组中根据对象的某个字段排序

  1. 开发中,经常碰到数组的排序问题,当然原始的冒泡、选择排序,还是比较好用的。
  2. 我们常常需要后台排好序再返回,当然也有需要前端排序的。我觉得数组的排序,根据对象数组的某个字段排序,是非常常见的。现在来说说:

  • sortedArrayUsingSelector
 - (void)sortArray1
{
    NSArray *tempArray = [NSArray arrayWithObjects:@"abc",@"123",@"bac",@"345",@"Abc", nil];
    //compare:使用的是字符串自带的方法
    NSArray *sortArray = [tempArray sortedArrayUsingSelector:@selector(compare:)];
    NSLog(@"%@",sortArray);
}

这种是最简单的排序。直接对数组进行排序。
- 我们看自定义compare的

//Car类 .h文件
@interface Car : NSObject
@property(nonatomic,copy)NSString *carId;
@property(nonatomic,assign)int carBuyTime;

+ (instancetype)CarWithCarId:(NSString *)carId andCarBuyTime:(int)carBuyTime;
- (NSComparisonResult)compareCar:(Car *)car;
@end
//.m 文件
#import "Car.h"

@implementation Car
+ (instancetype)CarWithCarId:(NSString *)carId andCarBuyTime:(int)carBuyTime
{
    Car *car = [[Car alloc]init];
    car.carId = carId;
    car.carBuyTime = carBuyTime;
    return car;
}

- (NSComparisonResult)compareCar:(Car *)car
{
    //先按照购买时间排序
   NSComparisonResult result = [[NSNumber numberWithInt:car.carBuyTime]compare:[NSNumber numberWithInt:self.carBuyTime]];
    if (result == NSOrderedSame) {
      result =   [car.carId compare:car.carId];
    }
    return  result;
}
@end

控制器调用:

- (void)sortArray2
{
    Car *car2 = [Car CarWithCarId:@"87323" andCarBuyTime:1988];
    Car *car3 = [Car CarWithCarId:@"87323" andCarBuyTime:1962];
    Car *car4 = [Car CarWithCarId:@"66666" andCarBuyTime:1970];
    Car *car1 = [Car CarWithCarId:@"32311" andCarBuyTime:1970];
    NSArray *array = [NSArray arrayWithObjects:car1,car2,car3,car4, nil];
   NSArray *sortedArray =  [array sortedArrayUsingSelector:@selector(compareCar:)];
    NSLog(@"%@",sortedArray);
}

输出:
排序


  • sortedArrayUsingComparator
- (void)sortArray3
{
    Car *car2 = [Car CarWithCarId:@"87323" andCarBuyTime:1988];
    Car *car3 = [Car CarWithCarId:@"87323" andCarBuyTime:1962];
    Car *car4 = [Car CarWithCarId:@"66666" andCarBuyTime:1970];
    Car *car1 = [Car CarWithCarId:@"32311" andCarBuyTime:1970];
    NSArray *array = [NSArray arrayWithObjects:car1,car2,car3,car4, nil];

  array =   [array sortedArrayUsingComparator:^NSComparisonResult(Car * obj1, Car * obj2) {
      NSComparisonResult result = [[NSNumber numberWithInt:obj1.carBuyTime]compare:[NSNumber numberWithInt:obj2.carBuyTime]];
      if (result == NSOrderedSame) {
          result =   [obj1.carId compare:obj2.carId];
      }
      return  result;
    }];

}

排序

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值