2

我有一个如下所示的对象:

class Report
  attr_accessor :weekly_stats, :report_times

  def initialize
    @weekly_stats = Hash.new {|h, k| h[k]={}}
    @report_times = Hash.new {|h, k| h[k]={}}
    values = []
  end
end

我想循环遍历weekly_stats 和report_times 并大写每个键并为其分配值。

现在我有这个:

report.weekly_stats.map do |attribute_name, value|
  report.values <<
 {
    :name => attribute_name.upcase,
    :content => value ||= "Not Currently Available"
  }
end
report.report_times.map do |attribute_name, value|
  report.values <<
  {
    :name => attribute_name.upcase,
    :content => format_date(value)
  }
end
report.values

有没有一种方法可以在一个循环中同时映射每周统计数据和报告时间?

谢谢

4

2 回答 2

3
(@report_times.keys + @weekly_stats.keys).map do |attribute_name|
  {
    :name => attribute_name.upcase,
    :content => @report_times[attribute_name] ? format_date(@report_times[attribute_name]) : @weekly_stats[attribute_name] || "Not Currently Available"
  }
end
于 2013-03-26T18:34:55.903 回答
1

如果您保证在 中为 nil 或空字符串weekly_stats,并且在 中获得日期对象report_times,那么您可以使用此信息来处理合并的哈希:

merged = report.report_times.merge( report.weekly_stats )

report.values = merged.map do |attribute_name, value|
 {
    :name => attribute_name.upcase,
    :content => value.is_a?(Date) ? format_date(value) : ( value || "Not Currently Available")
  }
end
于 2013-03-26T18:36:20.110 回答