3

NSMutable配列の注文に関するいくつかの投稿を読んでいますが、動作させるのに問題があります。基本的に、テーブルビューに多数のエントリがあり、無制限の量を追加できますが、次を含むNSMutable配列で注文する必要があります。数値。10をはるかに上回ります。誰かが私に助けてくれると本当にありがたいです。私はcompareパラメータを使用していますが、順序を逆にすることができないようです。次に、上記の数値を読みました。 10は奇妙な方法で注文を開始します。すぐにyコードを投稿しますが、私が熟考するための何かが素晴らしいでしょう。

ありがとう

4

1 に答える 1

7

答えは、配列内のオブジェクトが数値である文字列であるかによって少し異なります。配列を並べ替えるさまざまな方法もあります(、、sortUsingDescriptors... sortUsingComparator)。

数値の配列がある場合は、たとえば次のように降順で並べ替えることができます。

NSMutableArray *a = [NSMutableArray arrayWithObjects:@1, @55, @9, @17, nil];
[a sortUsingComparator:^NSComparisonResult(NSNumber *obj1, NSNumber *obj2) {
    return -[obj1 compare:obj2];
}];
// Result: 55, 17, 9, 1.

コンパレータブロックのマイナス記号は、増加から減少へと順序を逆にする効果があることに注意してください。

文字列の配列があり、同じように進めると、「10を超える数は奇妙な方法で順序付けを開始する」と呼ばれるものが得られます。

NSMutableArray *a = [NSMutableArray arrayWithObjects:@"1", @"55", @"9", @"17", nil];
[a sortUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {
    return -[obj1 compare:obj2];
}];
// Result: 9, 55, 17, 1.

オブジェクトは、数値ではなく文字列としてソートされます。

NSNumericSearch解決策は、次のオプションを使用することです。

NSMutableArray *a = [NSMutableArray arrayWithObjects:@"1", @"55", @"9", @"17", nil];
[a sortUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {
    return -[obj1 compare:obj2 options:NSNumericSearch];
}];
// Result: 55, 17, 9, 1.
于 2012-10-15T19:05:11.860 に答える