0

内部に NSInteger 値を持つ NSMutableArray をソートしたい。私はこのソリューションを使用しようとしました:

 NSArray *sorted = [array sortedArrayUsingSelector:@selector(compare:)];

それはほとんどうまくいったので、なぜすべてがうまくいかないのか尋ねたい. データの例を次に示します。

not sorted = (
    30,
    42,
    54,
    6,
    18
)

 sorted = (
    18,
    30,
    42,
    54,
    6
)

配列の最後にある 6 つの値を除くすべてがソートされていることがわかります。

なぜこれが起こったのですか?

ありがとうございました。

完全な方法:

- (void) initialize{
    NSInteger min = 30;
    NSInteger interval = 12;
    NSInteger count = floor(60/interval);

    for (int i = 0; i < count; i++) {

        [array addObject:[NSString stringWithFormat:@"%i",min]];
        min +=interval;

        if (min > 60)
            min -= 60;
    }

    //DLog(@"not sorted = %@",minutes);
    array = [[array sortedArrayUsingSelector:@selector(compare:)] mutableCopy];
    //DLog(@"sorted = %@",minutes);

}
4

1 に答える 1

1

NSNUMBERではなく文字列値を並べ替えているため、上記の場合に問題が発生します。整数のオブジェクトを追加するには、NSNumberを使用する必要があります。次に、次のようなことを行います。

      NSMutableArray *array = [[NSMutableArray alloc ] initWithObjects:
                              [NSNumber numberWithInt:10],    
                              [NSNumber numberWithInt:50],
                              [NSNumber numberWithInt:5],
                              [NSNumber numberWithInt:3],
                              nil];

      NSLog(@"SORTED = %@",[array sortedArrayUsingSelector:@selector(compare:
                                                               )]);

これにより、ソートされた配列が得られます。

于 2012-12-18T07:29:56.820 に答える