1

我有一个名为 'names' 的数组,其字符串如下所示: ["name_23_something", "name_25_something", "name_2_something"]; 现在我想按升序对该数组进行排序,使其看起来像这样: ["name_25_something", "name_23_something", "name_2_something"];

我想这应该从提取数字开始,因为我希望排序由它们完成:

for(NSString *name in arr) {
    NSArray *nameSegments = [name componentsSeparatedByString:@"_"];
    NSLog("number: %@", (NSString*)[nameSegments objectAtIndex:1]);     
}

我正在考虑用键创建一个字典,但我不确定这是否是正确的objective-c方式,也许有一些我可以使用的方法?您能否为我提供一些提示或示例代码,如何以正确的方式进行排序。

谢谢

4

3 回答 3

2

退房-[NSArray sortedArrayUsingComparator:]

于 2010-05-08T13:52:21.047 回答
2
@implementation NSString (MySort)

- (int) myValue {
    NSArray *nameSegments = [self componentsSeparatedByString:@"_"];
    return [[nameSegments objectAtIndex:1] intValue];
}

- (NSComparisonResult) myCompare:(NSString *)other {
    int result = [self myValue] - [other myValue];
    return result < 0 ? NSOrderedAscending : result > 0 ? NSOrderedDescending : NSOrderedSame;
}

@end

...

arr = [arr sortedArrayUsingSelector:@selector(myCompare:)];
于 2010-05-08T14:23:47.783 回答
1

谢谢您的回答!

我喜欢这样,你怎么看:

NSInteger sortNames(id v1, id v2, void *context) {
    NSArray *nameSegments = [(NSString*)v1 componentsSeparatedByString:@"_"];
    NSArray *nameSegments2 = [(NSString*)v2 componentsSeparatedByString:@"_"];
    int num1 = [[nameSegments objectAtIndex:1] integerValue];
    int num2 = [[nameSegments2 objectAtIndex:1] integerValue];
    if (num1 < num2)
        return NSOrderedDescending;
    else if (num1 > num2)
        return NSOrderedAscending;

    return NSOrderedSame;
}

names = [names sortedArrayUsingFunction:sortNames context:nil];

这将导致:

["name_25_something", "name_23_something", "name_2_something"];
于 2010-05-08T14:39:28.143 回答