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 可以非常简洁,如果不是总是很容易解析的话。