2016-12-21 10 views
2

キーが外部配列に存在する場合のみ、キーと値のペアの最大値を見つけようとしているハッシュがあります。ハッシュの値の最大値を求める配列のキー値

など。

Available_domains = ["A", "B"] 

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

私はavailable_domains配列にあるキーを計算しているので、2を返す必要があります。それを行う最善の方法が何であるか不思議です。

答えて

4

簡単な方法はこれです:配列のシンボルが含まれていた場合、with_indifferent_accessが不要になり

object.with_indifferent_access.values_at(*AvailableDomains).max 

が、そのので、ここで使われています:

AvailableDomains.map { |k| object[k.to_sym] }.max 

は、ここでそれを行うための別の方法です配列の文字列は、ハッシュのシンボルキーと一致することができます。

+0

何 'Available_domains = [ "A"、 "B"、 "D"]'もし? –

1

1つの可能な方法は、それから、最大を選択し、アレイ内にあるだけキーにオブジェクトをフィルタリングすることである。

object.select{ |key, value| Available_domains.include?(key.to_s)}.max_by{|key, value| value} 
+0

私は、あなたは "1行で"答えを与えることをお勧めします。 –

1
Available_domains = ["A", "B", "D"] 
object = { A: 1, B: 2, C: 3 } 

object.values_at(*Available_domains.map(&:to_sym)).compact.max 
    #=> 2 

:一列に

options = object.select{ |key, value| Available_domains.include?(key.to_s)} 
options.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 

Available_domains = ["D", "E"] 

次いで

object.values_at(*Available_domains.map(&:to_sym)).compact.max.nil? 
    #=> true 
関連する問題