根据可变字典的值对其进行排序

Sort mutable dictionary based on values of it

我有一个无序的 NSMutableDictioanry,这个字典是按照下面的例子创建的

{
    1 = 27;
    2 = 5;
    3 = 13964;
    4 = 2422;
    5 = 45;
    6 = 7;
    7 = 27;
    8 = 39;
}

我想根据值对这本字典进行排序。这可以根据以下文章完成,它工作得很好 Getting NSDictionary keys sorted by their respective values 并且 returns 一个数组,其中的键根据值

排序
(
    2,
    6,
    7,
    1,
    8,
    5,
    4,
    3
)

所以我的问题是无论如何我可以直接得到一个排序的字典而不是数组

我不是并行对象的忠实拥护者,但您可能想要一个排序的键数组和一个字典。

早些时候,当字典已经设置好时(可能在-viewWillAppear:)。

self.sortedKeys = [self.dictionary keysSortedByValueUsingSelector:@selector(compare:)];

然后在-tableView:cellForRowAtIndexPath:中使用

NSNumber *key = self.sortedKeys[indexPath.row];
NSNumber *value = self.dictionary[key];

作为非并行对象解决方案,您可以使用数组将键值对存储为两个项目的数组。 keyValuePair[0] 是键,keyValuePair[1] 是值。

- (NSArray *)sortedDataFromDictionary:(NSDictionary *)dictionary {
    NSMutableArray *result = [NSMutableArray arrayWithCapacity:dictionary.count];

    for (NSNumber *key in [dictionary keysSortedByValueUsingSelector:@selector(compare:)]) {
        NSArray *keyValuePair = @[key, dictionary[key]];
        [result addObject:keyValuePair];
    }

    return [result copy];
}

早先,当字典已设置时(可能在 -viewWillAppear:)。

self.sortedData = [self sortedDataFromDictionary:dictionary];

然后在-tableView:cellForRowAtIndexPath:中使用

NSNumber *key = self.sortedData[indexPath.row][0];
NSNumber *value = self.sortedData[indexPath.row][1];