首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rails散列数组计算一列

rails散列数组计算一列
EN

Stack Overflow用户
提问于 2018-08-02 10:56:54
回答 2查看 413关注 0票数 0

我有一个数组,它有很多列,我想更改一个列的值。

我的数组是:

代码语言:javascript
复制
  [
    {
    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,因为我使用一个空数组,并将这些散列推送到我的数组中,如下所示:

代码语言:javascript
复制
 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方法中,我是否不需要一个一个地推送列的名称?

我想要生成完全相同的数组,只需对生产力进行一次修改。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-02 11:05:00

假设您的数组是e,那么:

代码语言:javascript
复制
e.each { |item| item[:Productivity] = item[:Productivity]/100}

示例:

代码语言:javascript
复制
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}]

票数 0
EN

Stack Overflow用户

发布于 2018-08-02 11:12:30

您可以在这里借助地图方法从原始数组中创建一个新数组,但需要进行上述更改。

代码语言:javascript
复制
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条件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51651916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档