【问题标题】:Add missing objects to create an ordered collection添加缺失对象以创建有序集合
【发布时间】:2010-10-20 03:34:14
【问题描述】:

主题很模糊,因为我不知道如何用一句话表达我想要什么。

这里是:

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

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

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

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

关于我的方法的某些方面感觉实施起来很糟糕,所以我求助于你。想法?

谢谢。

【问题讨论】:

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


    【解决方案1】:

    您执行此操作的方式听起来非常合理,据我所知,没有什么可以在基本框架中自动执行。

    【讨论】:

      【解决方案2】:

      这段代码会对它们进行排序。

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

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

      【讨论】:

        【解决方案3】:

        您不需要进行排序:

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

        【讨论】:

        • 谢谢。这是一个值得考虑的技术。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-07
        • 2017-12-06
        • 1970-01-01
        • 2014-12-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多