如何使用哈希转换数组?

时间:2016-07-29 20:38:42

标签: ruby

我要做的是提供一个列列表,获取一系列列格式。我有一个列名称数组,其中键是列名称,值是列所需的格式。如果给定列的散列中没有值,则结果数组中的值必须为nil。

假设:

  report_columns = ["val1", "val2", "subtotal", 
                    "othertotal", "grand_total", "moar_total"]
  column_formats = {"grand_total"   => @highlight_money,
                    "subtotal"  => @money}

我可以使用此代码轻松完成:

  datatype_array = []
  report_columns.each {|col| datatype_array << column_formats[col] }
  # do stuff with datatype_array

但这是红宝石。有一个更简洁的方法来做到这一点!请让我知道我错过了什么神奇的方法。

1 个答案:

答案 0 :(得分:2)

您首次尝试应该是一个简单的map,而不是累积到数组上的each

datatype_array = report_columns.map { |c| column_formats[c] }

您还可以将列数组展开为Hash#values_at,这需要多个键名作为单独的参数:

datatype_array = column_formats.values_at(*report_columns)