我有一个哈希,我试图只找到一个键值对的最大值,但前提是该键存在于外部数组中。
E.g。
Available_domains = ["A", "B"]
object = {
A: 1,
B: 2,
C: 3
}
应该返回2,因为我只计算在available_domains数组中找到的键。想知道最好的办法是什么。
答案 0 :(得分:4)
一个简单的方法是:
AvailableDomains.map { |k| object[k.to_sym] }.max
这是另一种方法:
object.with_indifferent_access.values_at(*AvailableDomains).max
如果数组包含符号,则不需要with_indifferent_access,但这里使用它,以便Array的字符串可以匹配哈希的符号键。
答案 1 :(得分:1)
一种可能的方法是将对象过滤到数组中的键,然后从中选择最大值:
options = object.select{ |key, value| Available_domains.include?(key.to_s)}
options.max_by{|key, value| value}
在一行中:
object.select{ |key, value| Available_domains.include?(key.to_s)}.max_by{|key, value| value}
答案 2 :(得分:1)
Available_domains = ["A", "B", "D"]
object = { A: 1, B: 2, C: 3 }
object.values_at(*Available_domains.map(&:to_sym)).compact.max
#=> 2
步骤:
a = Available_domains.map(&:to_sym)
#=> [:A, :B, :D]
b = object.values_at(*a)
#=> [1, 2, nil]
c = b.compact
#=> [1, 2]
c.max
#=> 2
如果
Available_domains = ["D", "E"]
然后
object.values_at(*Available_domains.map(&:to_sym)).compact.max.nil?
#=> true