【问题标题】:ios split array into sections based on compare resultios根据比较结果将数组拆分为多个部分
【发布时间】:2014-03-20 23:24:29
【问题描述】:

我有一个 array 的对象,我目前正在按 date 排序(每个对象都有一个 date 字段)。

我希望能够将此数组拆分为多个部分,其中每个部分包含具有相同日期的对象。是否已经有支持的机制?

【问题讨论】:

  • 是的,只需实现 UITableViewDataSource 的 numberOfSectionsInTableView 和 numberOfRowsInSection。
  • 我需要能够首先弄清楚我需要多少个部分以及每个部分有多少行......这就是构建这个数据结构的全部意义。

标签: ios arrays sorting


【解决方案1】:

除了我在评论中建议的方式之外,似乎没有任何机制:

我创建了一个nsmutabledict,然后遍历我的排序对象列表。对于每个对象,我都会检查日期,并查看我的dict 中是否存在与该日期相关的键。如果是这样,我从dict 中检索该值并将此object 附加到该数组。如果没有,我创建一个新的 list 并将其插入到 dict 中,并使用与日期相关的密钥。

【讨论】:

    【解决方案2】:
    - (NSArray *)filteredArrayUsingPredicate:(NSPredicate *)predicate
    

    会有用的。编写一个谓词以获取与数组中第一项的日期匹配的所有元素的过滤数组。将该数组添加到一个新的可变数组中,该数组是包含所有过滤后的具有匹配日期的数组的对象。

    将该日期记录为已使用。遍历原始数组,直到找到不同的日期并重复 filteredArrayUsingPredicate 操作。继续这样做,直到你覆盖了数组中的所有唯一日期。

    我打算建议使用 NSSet 删除所有已过滤的项目以减少处理时间,但项目的数量可能很重要,并且根据对象 NSSet 可以丢弃重复项。

    一种优化可能是使用 NSSet 从原始数组非破坏性地创建一组唯一日期,然后迭代该组,执行filteredArrayUsingPredicate 操作。但这是否实用取决于您的数据。

    【讨论】:

    • 这似乎是一个非常低效的解决方案。对于存在的每个唯一日期,我将遍历整个数组一次。我可以简单地手动进行一次遍历(创建nsmutabledict 以跟踪日期,遍历排序数组,获取日期,查看dict 中是否存在日期键。如果存在,则附加到该键值的末尾,否则创建一个新的 dict 键,其值为 nsmutablearray
    • 当然,但不知道您的数据 - 普通 NSDate 还是包含 NSDate 的对象?很难进一步提出建议。
    • 它是一个包含 NSDate 的对象
    • 是的,我能搞定。我只是想知道是否已经有一种机制——类似于我不必实现自己的排序算法。如果没有,我可以使用我提到的方法。
    • @AtulBhatia,不,没有固定的方法可以做到这一点。你做这件事的方式和任何方式一样好。
    猜你喜欢
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 2021-08-14
    相关资源
    最近更新 更多