当字符串包含åäö时,如何按字母顺序对字符串数组进行排序?

use*_*526 7 arrays sorting objective-c

我正在xcode4.3/Objective-C中构建一个应用程序,并在尝试对NSMutableArray进行排序时遇到了问题.我将使用sqlite数据库中的字符串填充它.问题出现在瑞典人物å,ä和ö上.

orded数组看起来像这样:as,br,ol,st,år,ög,ös.

但是当我使用选择器比较顺序是这样的:as,år,br,ol,ög,ös,st.

当我使用localizedCompare时,订单更改为:as,år,br,ög,ol,ös,st.

根据较旧的线程,localizedCompare应该是解决方案,但我无法使其正常工作.如果我使用终端访问sqlite数据库并输入ORDER,我将得到正确的结果.我的问题可能与xcode或iphone模拟器中的某些设置有关,因为两者都没有显示正确的顺序?或者本地化比较错误的方式去?只要完成工作,我就会高兴地接受任何变通办法.谢谢.

Nic*_*ore 13

您可以通过compare:options:range:locale:显式使用和指定瑞典语语言环境来使其工作,如下所示:

NSArray *strings=[NSArray arrayWithObjects:@"as", @"ol", @"st", @"br", @"ög", @"år", @"ös", nil];
NSLocale *locale=[[NSLocale alloc] initWithLocaleIdentifier:@"sv_SE"];

NSArray *sorted=[strings sortedArrayUsingComparator:^(NSString *first, NSString *second) {
    return [first compare:second
                  options:0
                    range:NSMakeRange(0, [first length])
                   locale:locale];
}];

for (NSString *s in sorted) { NSLog(@"%@", s); }
Run Code Online (Sandbox Code Playgroud)

输出是:

2012-04-10 08:08:18.139 Untitled[32416:707] as
2012-04-10 08:08:18.140 Untitled[32416:707] br
2012-04-10 08:08:18.141 Untitled[32416:707] ol
2012-04-10 08:08:18.142 Untitled[32416:707] st
2012-04-10 08:08:18.142 Untitled[32416:707] år
2012-04-10 08:08:18.143 Untitled[32416:707] ög
2012-04-10 08:08:18.143 Untitled[32416:707] ös
Run Code Online (Sandbox Code Playgroud)