我有一个这样的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;
答案 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];
}
以上内容未经测试即输入到我的浏览器中,因此可能会有错别字。