0

beaus という配列に 200 から 1 の値を文字列として格納しています。

 NSSortDescriptor *sortDesc = [NSSortDescriptor sortDescriptorWithKey:@"dataoflar" ascending:NO];
    [beaus sortUsingDescriptors:@[sortDesc]];

ただし、これは最初の数字 (2 は 10 より大きい) でのみ並べ替えます。金額順に並べ替える方法はありますか?

4

4 に答える 4

1

値が最終的な配列の NSStrings であることは問題ではないと仮定すると、次のように並べ替える必要があります

NSMutableArray *mutableBeaus = [[beaus mutableCopy] autorelease];
[mutableBeaus sortUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {
    return [obj1 compare:obj2 options:NSNumericSearch];
}];

// mutableBeaus now has the array sorted in an ascending order 1 < 002 < 3
于 2013-02-18T18:58:52.993 に答える
1

次のように並べ替えの説明を更新できます。

NSSortDescriptor *sortDesc = [NSSortDescriptor sortDescriptorWithKey:@"dataoflar.integerValue" ascending:NO];
[beaus sortUsingDescriptors:@[sortDesc]];

これにより、各文字列の整数値が取得され、文字列値ではなくその数値に基づいて並べ替えが行われます。

于 2013-02-18T19:04:45.043 に答える
0

何らかの理由で、インポート中に文字列を int に変換したくない場合は、独自のソーターを作成して使用する必要があります。

これは、数値を含むタイプ NSString のプロパティ「datatoflat」で beause をソートする方法を示しています。ソートは昇順で行われます。降順の場合は、最後の行を に交換しreturn (i1- i2)ます。

NSArray *sortedArray;
sortedArray = [beaus sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
    NSString* s1 = [(NSString*) a dataoflar];
    NSString* s2 = [(NSString*) b dataoflar];

    int i1 = [s1 integerValue];
    int i2 = [s2 integerValue];
    return (i2 - i1);
}];
于 2013-02-18T18:58:34.400 に答える
-2

文字列を使用する必要がある場合は、数値をゼロで左に入力すると、「2」の代わりに「002」、「34」の代わりに「034」のように、他の変更を加えずに希望どおりに並べ替えられます。

于 2013-02-18T18:49:42.627 に答える