NSArray sortUsingFunction 自定义对象总是在最后

Posted

技术标签:

【中文标题】NSArray sortUsingFunction 自定义对象总是在最后【英文标题】:NSArray sortUsingFunction custom object always at the end 【发布时间】:2017-12-25 08:56:02 【问题描述】:

请帮忙。我有 NSArray,里面有自定义对象。例如 Person,因此名称为“Mark”的 Person 应始终位于末尾。是否可以在“sortUsingFunction”的帮助下做到这一点? 我猜是这样的,这里是排序函数:

static NSInteger compareFunction(id item1, id item2, void *context)

   Person *pItem1 = (Person *)item1;
   Person *pItem2 = (Person *)item2;

   if ([pItem1.name isEqual:@"Mark"])
   
      return NSOrderedDescending;
   

注意:应该是sortUsingFunction,没有其他函数。

【问题讨论】:

【参考方案1】:

是的,你的想法是可行的。这是一个经过测试的示例:

NSArray *names = @[@"John",@"Mark",@"Sandy"];
NSArray *markEndArray = [names sortedArrayUsingComparator:^NSComparisonResult(NSString *_Nonnull obj1, NSString *_Nonnull obj2) 
    if ([obj1 isEqualToString:@"Mark"]) 
        return NSOrderedDescending;
    

    return [obj1 compare:obj2];
];

NSLog(@"%@",markEndArray);

//Output:    
    John,
    Sandy,
    Mark

【讨论】:

【参考方案2】:

Yun CHEN 的版本不能完全运行。尝试使用以下名称失败:

NSArray *names = @[
    @"John",
    @"Noah",
    @"Liam",
    @"Mason",
    @"Jacob",
    @"William",
    @"Ethan",
    @"James",
    @"Alexander",
    @"Michael",
    @"Mark",
    @"Benjamin",
    @"Elijah",
    @"Daniel",
    @"Aiden",
    @"Logan",
    @"Matthew",
    @"Lucas",
    @"Jackson",
    @"David",
    @"Oliver",
    @"Jayden",
    @"Sandy"
];

错误的结果:

Aiden,
Alexander,
Benjamin,
Daniel,
David,
Elijah,
Ethan,
Jackson,
Jacob,
James,
Jayden,
John,
Liam,
Logan,
Lucas,
Matthew,
Oliver,
Sandy,
Mark,
Mason,
Michael,
Noah,
William

你必须像这样扩展它:

NSArray *markEndArray = [names sortedArrayUsingComparator:^NSComparisonResult(NSString *_Nonnull obj1, NSString *_Nonnull obj2) 
    if ([obj1 isEqualToString:@"Mark"]) 
        return NSOrderedDescending;
     else if ([obj2 isEqualToString:@"Mark"]) 
        return NSOrderedAscending;
     else 
        return [obj1 compare:obj2];
    
];

那应该没问题!

【讨论】:

以上是关于NSArray sortUsingFunction 自定义对象总是在最后的主要内容,如果未能解决你的问题,请参考以下文章

从 NSArray 获取单个属性的 NSArray

nsarray 中的 NSLog nsarray

NSArray 中的 iOS sdk NSArray 查找和合并

NSArray排序

如何按数组计数对嵌套 NSArray 的 NSArray 进行排序?

NSArray 的 NSArray 中对象属性的 NSPredicate