Rails从循环创建哈希

时间:2018-07-13 05:35:24

标签: ruby-on-rails loops hash

我正在尝试在循环中创建一个哈希对象,但是当我试图在循环中添加一个对象时却出现错误。

我的代码非常简单:

 hash_data = b.map do |el| 
        { y: el[compare], label: "rain_fall_type1" }
        { y: el[rain_fall_type], label: compare }
end

这段代码给了我这个结果:

    [
    {
    y: 45.34,
    label: "Land_Area"
    },
    {
    y: 45.23,
    label: "Land_Area"
    }
]

当我这样添加逗号时:

  hash_data = b.map do |el| 
        { y: el[compare], label: "rain_fall_type1" },
        { y: el[rain_fall_type], label: "Land_Area" }
end

我遇到语法错误,我想要这种类型的结果:

      [
    {
    y: 45.34,
    label: "rain_fall_type1"
    },
    {
    y: 46.23,
    label: "Land_Area"
    }
]

如何生成这样的结果。

2 个答案:

答案 0 :(得分:0)

hash_data = b.map do |el| 
  { y: el[compare], label: "rain_fall_type1" }
  { y: el[rain_fall_type], label: compare }
end

此映射块不会导致两个哈希。它包含两个不同的语句。第一个创建哈希并将其丢弃。第二个创建哈希,因为它是最后一个表达式,所以它从map块返回。第一条语句什么也不做。

如果要从地图块或其他任何对象返回多个散列,则必须将它们包装在另一个对象(如数组)中。

hash_data = b.map do |el| 
  [
    { y: el[compare], label: "rain_fall_type1" },
    { y: el[rain_fall_type], label: compare }
  ]
end

答案 1 :(得分:0)

您可以通过以下方式获得预期的结果

hash_data = orders.map do |el|
  [{ y: el[compare], label: "rain_fall_type1" }, { y: el[rain_fall_type], label: "Land_Area" }]
end
hash_data.flatten

,如果您希望它们成对出现,则

hash_data.flatten.each_slice(2).to_a