0

NSArrayを含む単純な がありNSNumberます。

この方法で配列を昇順に並べ替えます。

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

私の問題は、をNSNumber含む s を0最初ではなく最後にしたいということです。並べ替える必要がある配列の種類はNSNumber次のとおりです (例としていくつかの空の s が含まれています)。

0
25
12
0
8
0

もちろん、私のコードは次のように配列をソートします。

0
0
0
8
12
25

私が欲しいのはこれです:

8
12
25
0
0
0

もちろん、行を削除0して最後に追加することで手動で再注文することもできますが、可能な限りクリーンなソリューションを探しています。

4

5 に答える 5

13

コンパレータを使用して配列をソートします。

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;
}];
于 2013-05-02T12:55:09.567 に答える
4

これはあなたの問題を解決します、

NSArray *sortedScores = [_scores sortedArrayUsiHelperComparator:^(id obj1, id obj2){
    if([obj1 integerValue]==0 && [obj2 integerValue]==0){
        return (NSComparisonResult) NSOrderedSame;
    }else if([obj1 integerValue]==0){
        return (NSComparisonResult) NSOrderedDescending;
    }else 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;

}];
于 2013-05-02T12:53:31.283 に答える
1

方法 1:

  • ステップ 1: 配列をソートします。

  • ステップ 2: ゼロを配列の末尾に移動します。

方法 2:

  • 0ステップ 1:他の値の後に並べるコンパレータ関数を記述します。

  • ステップ 2: 配列をソートします。

于 2013-05-02T12:53:18.760 に答える