1

複数桁の整数の配列を昇順にソートしたい。

ここに私の配列があります:

keyArray:
(
   978,
   1077,
   1067,
   1076,
   1072,
   1082,
   1079,
   1075,
   1071,
   1081,
   1078,
   1080,
   1074

)

これが私のコードです:

NSSortDescriptor *sortOrder = [NSSortDescriptor sortDescriptorWithKey:@"self"  ascending: YES];

NSArray *sortedArray2 = [keyArray sortedArrayUsingComparator:^(id str1, id str2) {

    if ([str1 integerValue] < [str2 integerValue]) {
        return (NSComparisonResult)NSOrderedDescending;
    }

    if ([str1 integerValue] > [str2 integerValue]) {
        return (NSComparisonResult)NSOrderedAscending;
    }
    return (NSComparisonResult)NSOrderedSame;
}];

NSLog(@"%@",[keyArray sortedArrayUsingDescriptors: [NSArray arrayWithObject:sortOrder]]);

問題は、これが配列をこのようにソートすることです

sortedArray: (

  1067,
  1071,
  1072,
  1074,
  1075,
  1076,
  1077,
  1078,
  1079,
  1080,
  1081,
  1082,
  978
)

最初に 4 桁の数字がソートされ、次に 3 桁の数字がソートされます。

4

2 に答える 2

8

あなたは本当に簡単にあなたが望むことを達成することができます、これを試してください:

NSArray * sortedArray2 = [keyArray sortedArrayUsingComparator:^(id str1, id str2){
    return [(NSString *)str1 compare:(NSString *)str2 options:NSNumericSearch];
}];
于 2012-04-27T08:01:42.623 に答える
0
NSInteger firstNumSort(id str1, id str2, void *context) {
int num1 = [str1 integerValue];
int num2 = [str2 integerValue];

if (num1 < num2)
    return NSOrderedAscending;
else if (num1 > num2)
    return NSOrderedDescending;

return NSOrderedSame;
}

// 短縮したい場合はこれを呼び出します...

NSArray *array = [NSArray arrayWithObjects:@"787",
                  @"344",
                  @"42334",
                  @"23432",
                  @"3423432",
                  nil];

NSLog(@"Sorted: %@", [array sortedArrayUsingFunction:firstNumSort context:NULL]);

詳細については、このリファレンスを参照してください...

うまくいけば、これはあなたを助けるでしょう...

于 2012-04-27T07:53:04.427 に答える