首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RUBY:将两个具有重复值的不同数组组合到散列中

RUBY:将两个具有重复值的不同数组组合到散列中
EN

Stack Overflow用户
提问于 2017-03-19 08:11:02
回答 4查看 88关注 0票数 3

我有两个数组。

代码语言:javascript
复制
product_name = ["Pomegranate", "Raspberry", "Miracle fruit", "Raspberry"]
product_quantity =  [2, 4, 5, 5]

我想知道如何初始化散列,使其成为

代码语言:javascript
复制
product_hash = {"Pomegranate"=>2, "Raspberry"=>9, "Miracle fruit"=>5}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-03-19 08:18:43

我会从这样的开始:

代码语言:javascript
复制
product_name.zip(product_quantity)
            .group_by(&:first)
            .map { |k, v| [k, v.map(&:last).inject(:+)] }
            .to_h
#=> { "Pomegranate" => 2, "Raspberry" => 9, "Miracle fruit" => 5}

我建议在Ruby中查找ArrayHash的每个方法,并在控制台中检查每个中间步骤返回的内容。

票数 1
EN

Stack Overflow用户

发布于 2017-03-19 08:33:36

使用each_with_object

代码语言:javascript
复制
product_name.zip(product_quantity)
            .each_with_object({}) {|(k, v), h| h[k] ? h[k] += v : h[k] = v }
#=> {"Pomegranate"=>2, "Raspberry"=>9, "Miracle fruit"=>5}

或者只使用带有默认值的散列:

代码语言:javascript
复制
product_name.zip(product_quantity)
            .each_with_object(Hash.new(0)) {|(k, v), h| h[k] += v }
#=> {"Pomegranate"=>2, "Raspberry"=>9, "Miracle fruit"=>5}
票数 4
EN

Stack Overflow用户

发布于 2017-03-19 13:49:36

这只是@llya的解决方案#2的一个细微的变化。

代码语言:javascript
复制
product_name.each_index.with_object(Hash.new(0)) { |i,h|
  h[product_name[i]] += h[product_quantity[i]] }            .
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42884331

复制
相关文章

相似问题

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