在散列中查找值的最大值,其中数组中的键值

时间:2016-12-21 02:39:23

标签: arrays ruby

我有一个哈希,我试图只找到一个键值对的最大值,但前提是该键存在于外部数组中。

E.g。

Available_domains = ["A", "B"]

object = {
A: 1,
B: 2,
C: 3
}

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

3 个答案:

答案 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