1

iOSのピッカーコントロールにキーをロードしています。私の問題は、キーをアルファベット順にソートできないことです。

ソートされていないコードでは、Nordfyn、Svendborg、Nyborg、Langeland、Assens、Kerteminde、Middelfart、Odense、Ærø、Faaborg-Midtfyn から、Sorted: Ærø、Svendborg、Nyborg、Langeland、Kerteminde、Nordfyn、Middelfart、Assens、Odense になります。 、Faaborg-Midtfyn。

NSBundle *KSbundle = [NSBundle mainBundle];
NSURL *KSplistURL = [KSbundle URLForResource:@"KommunerStedtillæg" 
                           withExtension:@"plist"];
NSDictionary *KSdictionary = [NSDictionary 
                            dictionaryWithContentsOfURL:KSplistURL];


NSArray *KSkeys = [[KSdictionary allKeys] sortedArrayUsingSelector:@selector(compare:)];


NSMutableDictionary *KSnewDict = [NSMutableDictionary dictionary];

for (id key in KSkeys)
    [KSnewDict setObject:[KSdictionary objectForKey:key] forKey:key];

kommunerKeys = [KSnewDict allKeys];
kommunerValues = [KSnewDict allValues];
4

3 に答える 3

3

kommunerKeys を見ているように見えますが、ディクショナリ内のキーの順序は定義されていません (リンクを参照)。追加する前に並べ替えても役に立ちません。

于 2012-07-03T10:33:06.517 に答える
0
NSArray *stringsArray = [NSArray arrayWithObjects:
                                 @"string 1",
                                 @"String 21",
                                 @"string 12",
                                 @"String 11",
                                 @"String 02", nil];

static NSStringCompareOptions comparisonOptions = NSCaseInsensitiveSearch | NSNumericSearch |
        NSWidthInsensitiveSearch | NSForcedOrderingSearch;
NSLocale *currentLocale = [NSLocale currentLocale];

NSComparator finderSortBlock = ^(id string1, id string2) {

    NSRange string1Range = NSMakeRange(0, [string1 length]);
    return [string1 compare:string2 options:comparisonOptions range:string1Range locale:currentLocale];
};

NSArray *finderSortArray = [stringsArray sortedArrayUsingComparator:finderSortBlock];
NSLog(@"finderSortArray: %@", finderSortArray);

こちらのフォームhttp://www.developers-life.com/sorting-by-block.html

必要なオプションを追加

于 2012-07-03T10:14:59.180 に答える
0

あなたはおそらくこれを探しています:

 [array sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

単純に比較するだけでは十分ではありません。

于 2012-07-03T10:15:13.203 に答える