13

わかりましたので、辞書を並べ替えることができないことはわかっています。しかし、NSMutableArray *keys = [someDictionary allKeys];今、辞書内の対応する値に基づいて (アルファベット順に) これらのキーを並べ替えたいとします。したがって、辞書に が含まれている場合、対応する文字列に基づいkey=someStringて並べ替えたいと思います。keysの応用だと思いますsortUsingComparatorが、現時点では少し手の届かないところにあります。

4

5 に答える 5

21
NSArray *keys = [someDictionary allKeys];
NSArray *sortedKeys = [keys sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
    NSString *first = [someDictionary objectForKey:a];
    NSString *second = [someDictionary objectForKey:b];
    return [first compare:second];
}];
于 2012-07-19T06:16:25.557 に答える
3

辞書のキーに基づいて NSDictionary のキーを並べ替える

Abobe は、辞書の内容に基づいて並べ替えられた配列を返すためのものです。これは、辞書のキーで並べ替えられた配列を返すためのものです。

NSArray *keys = [theDictionary allKeys];
NSArray *sortedKeys = [keys sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
    return [a compare:b];
}];
NSMutableArray *sortedValues = [NSMutableArray new];
for(NSString *key in sortedKeys)
    [sortedValues addObject:[dictFilterValues objectForKey:key]];
于 2016-01-04T09:00:31.073 に答える
3
NSDictionary *dict = // however you obtain the dictionary
NSMutableArray *sortedKeys = [NSMutableArray array];

NSArray *objs = [dict allValues];
NSArray *sortedObjs = [objs sortedArrayUsingSelector:@selector(compare:)];
for (NSString *s in sortedObjs)
    [sortedKeys addObjectsFromArray:[dict allKeysForObject:s]];

sortedKey対応するオブジェクトでソートされたキーが含まれるようになりました。

于 2012-07-19T06:13:13.243 に答える
1

どこにも見つからなかったので、ここに書いてください:値に基づいて NSDictionary から英数字でソートされた NSDictionary を取得するには-私の場合は必要でした-次のことができます:

//sort typeDict alphanumeric to show it in order of values
    NSArray *keys = [typeDict allKeys];

    NSArray *sortedKeys = [keys sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
        NSString *first = [typeDict objectForKey:a];
        NSString *second = [typeDict objectForKey:b];
        return [first compare:second];
    }];
    NSLog(@"sorted Array: %@", sortedKeys);

    NSMutableDictionary *sortedTypeDict = [NSMutableDictionary dictionary];
    int counter = 0;
    for(int i=0; i < [typeDict count]; i++){
        NSString *val = [typeDict objectForKey:[sortedKeys objectAtIndex:counter]];
        NSString *thekey = [sortedKeys objectAtIndex:counter];
        [sortedTypeDict setObject:val forKey:thekey];
        counter++;
    }
    NSLog(@"\n\nsorted dict: %@", sortedTypeDict);

大したことではありません!

于 2015-01-27T15:22:50.880 に答える