如何对NSDictionary的值部分进行排序?

时间:2019-07-15 17:04:23

标签: objective-c

我有一个这样的NSDictionary:

self.channels = @{
                  @"Entertainment" : @[@"SnackableTV", @"Crave", @"Bravo", @"ETVE"],
                  @"Discovery" : @[@"Discovery", @"Discovery Velocity", @"Discovery Investigation", @"Discovery Animal Planet", @"Discovery Science"],
                  @"News" : @[@"CTV", @"CP24", @"BNN", @"CTV News"],
                  @"Sports" : @[@"TSN", @"RDS"],
                  };
self.sortedSectionNames = [[self.channels allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

我可以对部分名称进行排序,但是由于每个值都是字符串数组,因此我不确定如何对值进行排序。

理想情况下,我希望它像这样出来:

@"Entertainment": @[@"Bravo", @"Crave", @"ETVE", @"SnackableTV"],
@"Discovery": @[@"Discovery", @"Discovery Animal Planet", @"Discovery Investigation", @"Discovery Science", @"Discovery Velocity"];

等...

我希望我的表视图在每个节中既有已排序的节标题又有已排序的行。请指教吗?

上面列出的两个变量的定义如下:

@property (nonatomic, copy) NSDictionary<NSString *, NSArray<NSString *> *> *channels;
@property (nonatomic, copy) NSArray<NSString *> *sortedSectionNames;

1 个答案:

答案 0 :(得分:1)

一种解决方案是覆盖channels属性的设置器:

- (void)setChannels:(NSDictionary<NSString *, NSArray<NSString *> *> *)value {
    NSMutableDictionary *res = [NSMutableDictionary dictionary];
    for (NSString *key in [value allKeys]) {
        NSArray *values = [value[key] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
        res[key] = values;
    }

    _channels = [res copy];
}

以上内容未经测试即输入到我的浏览器中,因此可能会有错别字。