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 中的 iOS sdk NSArray 查找和合并