Arrays 在哈希中查找值的最大值,其中数组中的键值

Arrays 在哈希中查找值的最大值,其中数组中的键值,arrays,ruby,Arrays,Ruby,我有一个散列,我试图找到一个键值对的最大值,但只有当该键存在于外部数组中时 例如 应该返回2,因为我只计算在available_domains数组中找到的密钥。想知道最好的方法是什么。一个简单的方法是: AvailableDomains.map { |k| object[k.to_sym] }.max 下面是另一种方法: object.with_indifferent_access.values_at(*AvailableDomains).max 如果数组包含符号,则不需要with_INER

我有一个散列,我试图找到一个键值对的最大值,但只有当该键存在于外部数组中时

例如

应该返回2,因为我只计算在available_domains数组中找到的密钥。想知道最好的方法是什么。

一个简单的方法是:

AvailableDomains.map { |k| object[k.to_sym] }.max
下面是另一种方法:

object.with_indifferent_access.values_at(*AvailableDomains).max

如果数组包含符号,则不需要with_INERTIONE_访问,但此处使用with_INERTIONE_访问,以便数组的字符串可以匹配哈希的符号键

一种可能的方法是将对象过滤到数组中的关键帧,然后从中选择最大值:

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}
步骤如下:

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 
如果

然后


如果
可用\u域=[“A”、“B”、“D”]
怎么办?我建议您只给出“一行”答案。
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