ios - 按升序对 NSArray 的数字进行排序,但在末尾发送零

标签 ios objective-c nsarray nssortdescriptor

我有一个简单的 NSArray,包含 NSNumber

我按照这种方式对数组进行升序排序:

NSSortDescriptor *lowestToHighest = [NSSortDescriptor sortDescriptorWithKey:@"self" ascending:YES];
[_scores sortUsingDescriptors:[NSArray arrayWithObject:lowestToHighest]];

我的问题是,我希望包含 0NSNumber 位于结尾而不是开头。这是我可能需要排序的数组类型(包含一些空的 NSNumber 只是为了示例):

0
25
12
0
8
0

我的代码当然是这样对数组进行排序的:

0
0
0
8
12
25

我想要的是:

8
12
25
0
0
0

当然,我可以通过删除带有 0 的行并在末尾添加它们来手动重新排序,但我正在寻找可能的最干净的解决方案。

最佳答案

使用 comparator 对数组进行排序.

NSArray *sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) {

    if ([obj1 integerValue] == 0 && [obj2 integerValue] == 0)
    {
        return (NSComparisonResult)NSOrderedSame;
    }
    if ([obj1 integerValue] == 0)
    {
        return (NSComparisonResult)NSOrderedDescending;            
    }
    if ([obj2 integerValue] == 0)
    {
         return (NSComparisonResult)NSOrderedAscending;
    }

    if ([obj1 integerValue] > [obj2 integerValue]) 
    {
        return (NSComparisonResult)NSOrderedDescending;
    }

    if ([obj1 integerValue] < [obj2 integerValue]) 
    {
        return (NSComparisonResult)NSOrderedAscending;
    }
    return (NSComparisonResult)NSOrderedSame;
}];

关于ios - 按升序对 NSArray 的数字进行排序,但在末尾发送零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16338443/

相关文章:

ios - 如何从嵌套 JSON Swift 检索值

ios - viewDidLoad 是否在 UITabBarController 中被多次调用?

iphone - UITableview 调整大小动画

ios - Objective-C For-In循环获取索引

objective-c - Objective-C : Unsigned int compare

objective-c - JSONModel 返回 nil

ios - Swift 2 FirebaseTableView

ios - 具有多个 ViewController 的 SplitView - Storyboard - iOS

ios - MVC 模型 - Controller 应该直接访问 View 的控件吗?

objective-c - NSString 解析以查找日期