6

重複の可能性:
NSSortDescriptorを使用してNSIntegerのようにNSString値を並べ替える

NSMutableDictionaryで埋める配列があります。これを使用します。

myArray =[[myDict allKeys]sortedArrayUsingSelector:@selector(IDONTKNOW:)];

myDictsのAllKeysはNSStringsです...123.423や423.343のように...新しいmyArrayを増分番号で並べ替える必要があります。12.23445.3343522.5335432.66など

これを正しく行うには、@ selectorに何を挿入する必要がありますか?ありがとう

4

3 に答える 3

20

NSSortDescriptorand をdoubleValueキーとして使用できます。

//sfloats would be your [myDict allKeys]
NSArray *sfloats = @[ @"192.5235", @"235.4362", @"3.235", @"500.235", @"219.72" ];
NSArray *myArray = [sfloats sortedArrayUsingDescriptors:
                    @[[NSSortDescriptor sortDescriptorWithKey:@"doubleValue" 
                                                    ascending:YES]]];

NSLog(@"Sorted: %@", myArray);
于 2012-11-12T23:19:50.827 に答える
6

を直接使用することはできませんsortedArrayUsingSelector:sortedArrayUsingComparator:自分で比較ブロックを使用して実装します。

このようなq/aのようなもの:

-[NSArraysortedArrayUsingComparator:]のソート順を変更します

(実際、その質問のコードはコードにコピー/貼り付けできる可能性があり、4つの文字列から数値への変換呼び出しでからintegerValueに変更すると「正常に機能」します):doubleValue

NSArray *sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) {
    double n1 = [obj1 doubleValue];
    double n2 = [obj2 doubleValue];
    if (n1 > n2) {
        return (NSComparisonResult)NSOrderedDescending;
    }

    if (n1 < n2) {
        return (NSComparisonResult)NSOrderedAscending;
    }

    return (NSComparisonResult)NSOrderedSame;
}];
于 2012-11-12T23:15:26.473 に答える
0

を検討してくださいsortedArrayUsingFunction:。これにより、要素を比較するときに使用するカスタム比較関数を定義できます。

myArray =[[myDict allKeys]sortedArrayUsingFunction:SortAsNumbers context:self];   

NSInteger SortAsNumbers(id id1, id id2, void *context)
{
    float v1 = [id1 floatValue];
    float v2 = [id2 floatValue];
    if (v1 < v2) {
        return NSOrderedAscending;
    } else if (v1 > v2) {
        return NSOrderedDescending;
    }
    return NSOrderedSame;
}

ここで入手可能な詳細情報: sortedArrayUsingFunction を使用して NSArray をソートする

于 2012-11-12T23:22:00.573 に答える