对于:
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)}
但我仍然坚持使用这个东西并加入其中。
答案 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可以非常简洁,如果不总是很容易解析。