我有一个数组,它有很多列,我想更改一个列的值。
我的数组是:
[
{
id: 1,
Districts: "Lakhisarai",
Area: 15.87,
Production: 67.77,
Productivity: 4271,
Year: 2015,
Area_Colour: "Red",
Production_Colour: "Orange",
Productivity_Colour: "Dark_Green",
created_at: "2018-07-24T11:24:13.000Z",
updated_at: "2018-07-24T11:24:13.000Z"
},
{
id: 29,
Districts: "Begusarai",
Area: 18.53,
Production: 29.35,
Productivity: 1584,
Year: 2015,
Area_Colour: "Red",
Production_Colour: "Red",
Productivity_Colour: "Orange",
created_at: "2018-07-24T11:24:13.000Z",
updated_at: "2018-07-24T11:24:13.000Z"
},
...
]这是我的示例数组,我希望生产力除以100,因为我使用一个空数组,并将这些散列推送到我的数组中,如下所示:
j = []
b.map do |k|
if k.Productivity
u = k.Productivity/100
j.push({id: k.id, Productivity: u })
else
j.push({id: k.id, Productivity: k.Productivity })
end有什么简单的方法可以生成这类数组并反映对一列的更改吗?在push方法中,我是否不需要一个一个地推送列的名称?
我想要生成完全相同的数组,只需对生产力进行一次修改。
发布于 2018-08-02 11:05:00
假设您的数组是e,那么:
e.each { |item| item[:Productivity] = item[:Productivity]/100}示例:
e = [{p: 12, d: 13}, {p:14, d:70}]
e.each { |item| item[:p] = item[:p]/10}输出: [{:p=>1, :d=>13}, {:p=>1, :d=>70}]
发布于 2018-08-02 11:12:30
您可以在这里借助地图方法从原始数组中创建一个新数组,但需要进行上述更改。
ary.map do |elem|
h = elem.slice(:id)
h[:productivity] = elem[:Productivity] / 100 if elem[:Productivity]
h
end
=> [{:id=>1, :productivity=>42}, {:id=>29, :productivity=>15}] 注意,Hash#slice返回一个新的哈希,它只返回在参数中传递的键的键值对,例如在这里,它返回第一个元素的{ id: 1 }。
此外,只有在原始哈希设置时,我们才将计算的生产率分配给输出。因此,这里的if条件。
https://stackoverflow.com/questions/51651916
复制相似问题