beaus という配列に 200 から 1 の値を文字列として格納しています。
NSSortDescriptor *sortDesc = [NSSortDescriptor sortDescriptorWithKey:@"dataoflar" ascending:NO];
[beaus sortUsingDescriptors:@[sortDesc]];
ただし、これは最初の数字 (2 は 10 より大きい) でのみ並べ替えます。金額順に並べ替える方法はありますか?
値が最終的な配列の 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
次のように並べ替えの説明を更新できます。
NSSortDescriptor *sortDesc = [NSSortDescriptor sortDescriptorWithKey:@"dataoflar.integerValue" ascending:NO];
[beaus sortUsingDescriptors:@[sortDesc]];
これにより、各文字列の整数値が取得され、文字列値ではなくその数値に基づいて並べ替えが行われます。
何らかの理由で、インポート中に文字列を 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);
}];
文字列を使用する必要がある場合は、数値をゼロで左に入力すると、「2」の代わりに「002」、「34」の代わりに「034」のように、他の変更を加えずに希望どおりに並べ替えられます。