2

配列をアルファベット順に並べ替えようとしています。スウェーデン語のアルファベットでは、文字Åはアルファベットの最後から3番目の文字であるため、以下の配列は次のように並べ替える必要がありますA, B, Åが、代わりに。のように並べ替えA, Å, Bます。この振る舞いの理由は何でしょうか?

NSArray *test = @[@"Å", @"A", @"B"];

NSArray *sortedTest = [test sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; 
// Output is A, Å, B
4

1 に答える 1

5

おそらく、現在のロケールはスウェーデン語のロケールではありませんか?

文字列の並べ替えにスウェーデン語のロケールを明示的に使用すると、期待どおりに機能します。

NSArray *test = @[@"Å", @"A", @"B"];
NSLocale *swedish = [[NSLocale alloc] initWithLocaleIdentifier:@"sv"];

NSArray *sortedTest = [test sortedArrayWithOptions:0
                                   usingComparator:^(NSString  *v1, NSString *v2) {
    return [v1 compare:v2 options:NSCaseInsensitiveSearch
                 range:NSMakeRange(0, [v1 length])
                locale:swedish];
}];

// Output: A, B, Å
于 2013-01-05T22:51:16.547 に答える