1

["name_23_something", "name_25_something", "name_2_something"]; のような文字列を持つ「names」という名前の配列があります。["name_25_something", "name_23_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
@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 に答える
2

チェックアウトしてください-[NSArray sortedArrayUsingComparator:]

于 2010-05-08T13:52:21.047 に答える
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 に答える