比较数组值和散列键。如果匹配,请将相应的哈希值相加

时间:2017-01-07 16:39:07

标签: arrays ruby hash

对于:

a = [:product_one, :product_two, :product_three]
h = { product_one: 5, product_two: 9, product_three: 4, 
      product_four: 12, product_five: 20 }

我试图看看散列键是否与数组值匹配(或者它应该是相反的吗?我的数组值是否与我的散列键匹配?)然后获取相应的匹配散列值并求它们。

我正在考虑.select,例如h.select {|item| h.has_key?(item)}但我仍然坚持使用这个东西并加入其中。

2 个答案:

答案 0 :(得分:4)

您可以这样写:

h.values_at(*a).sum

或(对于Ruby版本< 2.4):

h.values_at(*a).inject(:+)

答案 1 :(得分:1)

您可以执行以下操作:

a.map {|key| h[key] }.compact.reduce(:+)

总结:

  • map会将块应用于数组中的每个元素
  • h[key]将返回相应的值,如果没有则返回nil
  • compact将删除所有nil值
  • reduce(:+)会将它们相加

Ruby可以非常简洁,如果不总是很容易解析。