添加缺少的对象以创建有序集合

时间:2010-10-20 03:34:15

标签: objective-c cocoa nsarray key-value-coding

主题含糊不清,因为我不确定如何用一句话表达我想要的东西。

这里是:

我有NSArray的NSArray。每个NSDictionary代表日历年的一天。每个NSDictionary都有一个关键的“日期”,其值为NSDate。数组中应该有365个NSDictionary项。字典是由我无法控制的服务器创建的,有时缺少100天。

我需要确保数组有365个词典,每个词典比下一个词典晚一天。

我目前按日期对数组进行排序,遍历它,将NSDictionaries从当前数组复制到新数组。这样做时,我将当前Dictionary的日期值与下一个字典的日期值进行比较。如果两个日期之间有一天以上的时间,我会在新数组中添加足够的新词典以覆盖缺失的日期(并相应地设置日期),然后继续。

由于日期应该是有序的,我想知道框架或语言中是否还没有一种机制可以用来说“这是一个数组,这个键路径应该是连续的。查找并创建缺少的元素,这里是一个可以用来初始化它们的块或方法“。

关于我的方法的一些事情只是感觉执行不力,所以我转向你。想法?

感谢。

3 个答案:

答案 0 :(得分:1)

你这样做的方式听起来非常理智,而且我知道没有什么可以在基础框架中自动完成。

答案 1 :(得分:0)

此代码将对它们进行排序。

NSArray *dates;  // wherever you get this...
NSArray *sortedDates = [dates sortedArrayUsingComparator:^(id obj1, id obj2) 
    {
    return [[obj1 valueForKey:@"date"] compare:[obj2 valueForKey:@"date"]];
    }];

至于创建缺失的条目,你必须自己做。

答案 2 :(得分:0)

您无需进行排序:

  1. 使用365(或366)个占位符字典创建一个数组(您可以对所有插槽使用相同的一个,或使用NSNull)
  2. 遍历传入的数组并找出每个字典的用途。将每个字典放在数组中的正确插槽中。