1

我正在为 iOS 应用程序使用 RubyMotion、ProMotion 和 MotionModel。我们将每天存储多个对日期/时间敏感的条目,并将它们列在一个大的 TableView 中。现在这些条目出现在一个大列表中:

在此处输入图像描述

我想做的是按日期分段条目以提高可读性:

在此处输入图像描述

我假设我可以通过遍历我的模型条目一次,提取所有唯一日期的数组,然后遍历日期数组并提取匹配的条目来完成这项工作。这会起作用,但我不禁认为可能有更好的方法来解决这个问题,使用一些我不熟悉的 Ruby 魔法。任何建议都非常感谢!

如果阅读本文的人知道 Ruby 或 RubyMotion 但不熟悉 ProMotion,我需要返回的数据格式如下:

[{
  title: "June 12, 2013",
  cells: [{
    title: "10:00am"
  },{
    title: "3:15pm"
  },{
    title: "7:00pm"
  },{
    title: "10:15pm"
  }]
},{
  title: "June 06, 2013",
  cells: [{
    title: "10:00am"
  },{
    title: "3:15pm"
  },{
    title: "7:00pm"
  },{
    title: "10:15pm"
  }]
}]

编辑:

当前按时间倒序生成表格单元格的代码:

[{
  cells: Entries.order{|one, two| two.entry_date <=> one.entry_date}.all.map{ |f|
    {
    title: Time.at(f.entry_date).strftime("%I:%M %p"), #"%m/%d/%Y"
    action: :show_entry,
    arguments: 
      {
        entry: f 
      }
    }
  }
}]
4

1 回答 1

1

假设times有您的 Time 实例数组:

df=NSDateFormatter.new.tap { |f| f.setDateStyle(NSDateFormatterMediumStyle) }
tf=NSDateFormatter.new.tap { |f| f.setTimeStyle(NSDateFormatterMediumStyle) }
times.inject({}) { |a, t|  (a[df.stringFromDate(t)] ||= []) << 
  tf.stringFromDate(t); a }.map { |k, v| Hash[title: k, cells: v.map { |t| {title: t} } ] }
于 2013-06-27T22:57:27.437 回答