比较数组值和哈希键.如果匹配,则对相应的哈希值求和



For :

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)}但我被困在数学和求和部分。

你可以

这样写:

h.values_at(*a).sum

或者(对于 Ruby 版本 <2.4):

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

你可以执行以下操作:

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

总结:

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

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

最新更新