0

重複の可能性:
NSArray で自然な並べ替えを行うには?

私は次のような配列を持っています: 4.value、8.value、1.value、3.value、5.value など、無制限のオブジェクトがあります。

この配列を 1 から最後の番号まで並べ替える方法はありますか? そう:

1.値、2.値、3.値.....

ありがとう!

4

2 に答える 2

3

配列内のオブジェクトの型が明確ではないため、次のコードを型に合わせて変更する必要がありますが、これは通常、配列を並べ替える方法です。

        NSMutableArray* array = [[NSMutableArray alloc] init];
    [array addObject:@"3.value"];
    [array addObject:@"1.value"];       
    [array addObject:@"4.value"];
    [array addObject:@"2.value"];               
    NSArray* sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) {
        // Write whatever comparison code is appropriate for your objects here
        // The following will only work for simple strings
        return [obj1 caseInsensitiveCompare:obj2];
    }];     
    NSLog(@"%@", sortedArray);

編集: 文字列を使用していて、文字列が常にフォーマットされている場合は、「Integer.String」という形式を取るため、次のコードを使用して配列をソートする必要があります。

    NSArray* sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) {
        NSInteger left = [obj1 integerValue];
        NSInteger right = [obj2 integerValue];

        if (left > right) {
            return NSOrderedDescending;
        }   

        if (left < right) {
           return NSOrderedAscending;
        }

        return NSOrderedSame;
    }];

文字列を比較するだけの場合、文字列は最初の文字でソートされるため、@"123.value" は "9.value" の前になります。

于 2012-12-25T13:15:57.127 に答える
1
NSArray *sortedarray = [[YourArray allObjects]
sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
NSLog(@"%@",sortedarray);
于 2012-12-25T13:52:22.670 に答える