sortedArrayUsingComparator int

Vin*_*ins 18 xcode objective-c

我有一个字典数组,sortArrayUsingComparator根据键对它们进行排序;

listPerc = [listItem sortedArrayUsingComparator: ^(id a, id b) {
    NSString *first = [a objectForKey:@"perc"];
    NSString *second = [b objectForKey:@"perc"];
    return [first compare:second];
Run Code Online (Sandbox Code Playgroud)

问题是这个键是一个数字,顺序是这样的例如:1,10,15,17,2,23等,它不计算数字的大小.我能怎么做?

Dee*_*olu 18

你不能像这样返回比较结果,

listPerc = [listItem sortedArrayUsingComparator: ^(id a, id b) {
    int first = [[a objectForKey:@"perc"] intValue];
    int second = [[b objectForKey:@"perc"] intValue];

    if ( first < second ) {
        return (NSComparisonResult)NSOrderedAscending;
    } else if ( first > second ) {
        return (NSComparisonResult)NSOrderedDescending;
    } else {
        return (NSComparisonResult)NSOrderedSame;
    }
}
Run Code Online (Sandbox Code Playgroud)


M.S*_*ran 7

@(Deepak Danduprolu)回答的一个非常简短的方法

listPerc = [listItem sortedArrayUsingComparator: ^(id a, id b) {
    NSNumber *first = @([[a objectForKey:@"perc"] intValue]);
    NSNumber *second = @([[b objectForKey:@"perc"] intValue]);
    return [first compare:second];
Run Code Online (Sandbox Code Playgroud)

}


vak*_*kio 4

将它们放入 NSNumber 对象并进行比较。要么将它们存储为 NSNumbers 以开始(首选方法),要么在比较时转换它们(较慢)。

将 NSString 转换为 NSNumber 可以通过以下方式完成:

NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber * myNumber = [f numberFromString:string];
[f release];
Run Code Online (Sandbox Code Playgroud)