【问题标题】:Sort mutable dictionary based on values of it根据它的值对可变字典进行排序
【发布时间】:2017-02-04 21:25:33
【问题描述】:

我有一个无序的 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 并将返回一个数组,其中的键根据值排序

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

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

【问题讨论】:

  • 你想对排序后的字典做什么?
  • NSDictionary 不关心对它们的键进行排序,因为它是一个键访问系统而不是索引访问系统来获取值。
  • dictionaryset 一样分类,您需要创建一个 array 并将您的内容放入其中想要排序(例如键)。
  • 字典在设计上是未排序的集合。所以,在你的情况下,也许不是正确的选择......

标签: ios nsmutabledictionary


【解决方案1】:

作为非并行对象解决方案,您可以使用数组将键值对存储为包含两项的数组。 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];

【讨论】:

    【解决方案2】:

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

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

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

    然后在-tableView:cellForRowAtIndexPath:使用

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

    【讨论】:

      猜你喜欢
      • 2021-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-11
      • 2020-01-03
      • 1970-01-01
      相关资源
      最近更新 更多