2

次のキー値を持つ NSdictionary オブジェクトがあります

キー: 1.infoKey、2.infoKey、3.infoKey、4.infoKey、5.infoKey、6.infoKey、7.infoKey、8.infoKey、9.infoKey、10.infoKey、11.infoKey

これらはソートされておらず、3.infoKey、7.infoKey、2.infoKey など、どのような順序でもかまいません。

私がやろうとしているのは、キー値を並べ替えることです。つまり、1,2,3,4,5,6,7,8,9,10,11 ....これは私がこれまで使用してきたコードですが、毎回私は並べ替えを行います、それは私が望まない順序で並べ替えます(以下を参照)

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *stringsPlistPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"talkBtns.plist"];

        NSMutableDictionary *dictionary2 = [[NSMutableDictionary alloc] initWithContentsOfFile:stringsPlistPath];


        NSArray *myKeys = [dictionary2 allKeys];

//This didn't give the right results
        //sortedKeys = [myKeys sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

//This didn't give the right results either
        NSSortDescriptor* sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:nil ascending:YES selector:@selector(localizedCompare:)];
        sortedKeys = [myKeys sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

    // ***********
        // GET KEY VALUES TO
        // LOOP OVER
        // ***********
        /* */
        for (int i = 0; i < [sortedKeys count]; i++) 
        {
            NSLog(@"[sortedKeys objectAtIndex:i]: %@", [sortedKeys objectAtIndex:i]);
        }

    //output I get
    [sortedKeys objectAtIndex:i]: 1.infoKey
    [sortedKeys objectAtIndex:i]: 10.infoKey
    [sortedKeys objectAtIndex:i]: 11.infoKey
    [sortedKeys objectAtIndex:i]: 2.infoKey
    [sortedKeys objectAtIndex:i]: 3.infoKey
    [sortedKeys objectAtIndex:i]: 4.infoKey
    [sortedKeys objectAtIndex:i]: 5.infoKey
    [sortedKeys objectAtIndex:i]: 6.infoKey
    [sortedKeys objectAtIndex:i]: 7.infoKey
    [sortedKeys objectAtIndex:i]: 8.infoKey
    [sortedKeys objectAtIndex:i]: 9.infoKey

両方の方法を試しましたが、どちらも同じ結果になります。スタックオーバーフローとグーグルであらゆる場所を検索しましたが、自分のニーズに合ったものが見つかりませんでした。

助言がありますか?

4

1 に答える 1

11

sortedArrayUsingComparator厳密にアルファベット順のソートでは 10 が 2 の前に来るため、 with を使用しoptions:NSNumericSearchて実際の数値順にソートできるはずです。

NSArray * sortedKeys = 
    [myKeys sortedArrayUsingComparator:^(id string1, id string2) {
        return [((NSString *)string1) compare:((NSString *)string2) 
                                      options:NSNumericSearch];
}];
于 2012-09-30T15:29:54.810 に答える