< - 为什么我被投了票?至少评论一些推理
我有一个传入的JSON数组,详细说明连续&非连续日期。
一个例子:
(请注意,根索引值例如是清晰度。真实数据只是关联键值)
[0] => '01/01/2015 - 05/01/2015' : ['01/01/2015',
'02/01/2015',
'03/01/2015',
'04/01/2015',
'05/01/2015'],
[1] => '01/02/2015 - 05/02/2015' : ['01/02/2015',
'02/02/2015',
'03/02/2015',
'04/02/2015',
'05/02/2015'],
[2] => '25/03/2015': '25/03/2015',
[3] => '01/04/2015': '01/04/2015'
我的最终目的是在UITableView
中显示每个关联键,其中select中的连续日期单元格(索引[0]
& [1]
)将转到另一个{ {1}}列出连续块的每个日期。非连续日期单元格(示例中的索引UITableView
& [2]
)将无法为用户选择,因为没有更多内容可供查看。精明?
我的问题是我将JSON数组导入[3]
和& NSArray
。 (读者应该知道数组是有序的,而不是字典)
NSDictionary
导入的数据结构正确。问题是我无法在第一个NSArray
中显示密钥,从中可以使用相关值填充第二个UITableView
。
我接受了UITableView
的{{1}} NSArray
,它为我提供了非结构化字典的键的结构化数组。我可以用它来显示第一个allKeys
,但是它的数据结构表示不适用于导入的结构。它的混乱和混乱每次都不同。
我的问题是我到底该怎么做?但我应该想象这个问题可能不够具体......那么,我如何按日期顺序对字典的NSDictionary
数组进行排序?
如果您的想法,“这很容易!只需使用描述符排序”,
像这样......?UITableView
可悲的是,这太容易了。这适用于非连续日期键或单个日期,但如果我有连续的日期键,allKeys
它会失败。整体NSSortDescriptor *descriptor=[[NSSortDescriptor alloc] initWithKey:@"self" ascending:NO];
NSArray *descriptors=[NSArray arrayWithObject: descriptor];
NSArray *reverseOrder=[self.dateKeys sortedArrayUsingDescriptors:descriptors];
更接近真正的导入数据结构,但不够接近
答案 0 :(得分:0)
您可以将回复映射到NSArray
,其中每个项目都是NSDictionary
,其中包含密钥(范围)和NSArray
个值(日期)或{ {1}}(单日期)。
示例:
NSString
然后,您可以从主数组中填充第一个NSArray *data = @[
@{
@"01/01/2015 - 05/01/2015" : @[
@"01/01/2015",
@"02/01/2015",
@"03/01/2015",
@"04/01/2015",
@"05/01/2015"
]
},
@{
@"25/03/2015" : @"25/03/2015"
}
];
,因此从数组中的每个项目中获取字典键。
UITableView
第二个NSMutableArray *table1Data = [[NSMutableArray alloc] initWithCapacity:data.count];
for (NSDictionary *dateRange in data) {
[table1Data addObject:[[dateRange allKeys] firstObject]];
}
是从主数组中所选项的字典值(日期数组)中填充的,仅当值为UITableView
时才填充:
NSArray
答案 1 :(得分:0)
如果我读了你,你想按时间顺序显示一个带有日期范围(键)的TableView,如下所示:
Row 1: 01/01/2015 - 05/01/2015
Row 2: 01/02/2015 - 05/02/2015
Row 3: 25/03/2015
Row 4: 01/04/2015
然后,当点击第1行或第2行时,在另一个TableView中显示该范围内的所有日期,即第1行:
Row 1: 01/01/2015
Row 2: 02/01/2015
Row 3: 03/01/2015
Row 4: 04/01/2015
Row 5: 05/01/2015
您确实需要将此数据存储在NSDictionary *dateRanges
中,但在处理字符串时,您需要将这些日期范围封装在新类中,这样可以更轻松地对其值进行排序。
例如,您可能有一个DateRange
课程,其中有两个@properties
类型NSDate
:startDate
和endDate
,其中endDate
是这些单日期nil
(即2015年3月25日)。然后,您可以使用NSSortDescriptor
按startDate
排序[dateRanges allKeys]
:
NSArray *dateKeys = [self.dateRanges allKeys];
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"startDate" ascending:NO];
NSArray *reverseOrder = [dateKeys sortedArrayUsingDescriptors:@[ descriptor ]];