2016-04-18 12 views
-1

私はルビーで新しいです。私の質問:2つのハッシュruby​​:2つのハッシュの要素の比較

最初があります。名前は=>給料

people = { 
    "Jack" => 1500, 
    "John" => 3000, 
    "Peter" => 2500, 
    "Simon" => 4000 
} 

秒:車=>価格

cars = { 
    "Audi" => 50000, 
    "BMW" => 70000, 
    "Skoda" => 30000, 
    "Volvo" => 40000 
} 

と私は結果が新しいソートハッシュで、コードが必要です"name_of_richest_man" => "the_most_expensive_car"

result = { 
    "Simon" => "BMW", 
    "John" => "Audi", 
    "Peter" => "Volvo", 
    "Jack" => "Skoda" 
} 
+0

何を計算します試しましたか?これまでのところ?いくつかの進捗状況を投稿してください。 – ehh

答えて

3
people.sort_by{|_, v| v}.zip(cars.sort_by{|_, v| v}) 
.reverse 
.map{|(k, _), (v, _)| [k, v]}.to_h 
# => {"Simon"=>"BMW", "John"=>"Audi", "Peter"=>"Volvo", "Jack"=>"Skoda"} 

それとも、それをより読みやすくするために、

[people, cars].map{|h| h.keys.sort_by{|k| h[k]}}.transpose.reverse.to_h 
# => {"Simon"=>"BMW", "John"=>"Audi", "Peter"=>"Volvo", "Jack"=>"Skoda"} 
+0

Com'on @ sawa、彼はRubyの初心者です。そのコードで彼を怖がらせてはいけません。 – Minato

+0

@Minatoわかりました。 – sawa

0

あなたはkeys_sorted_by_decreasing_valueでの計算を考えてみましょう

def keys_sorted_by_decreasing_value(h) 
    h.sort_by(&:last).map(&:first).reverse 
end 

keys_sorted_by_decreasing_value(people).zip(keys_sorted_by_decreasing_value(cars)).to_h 
    #=> {"Simon"=>"BMW", "John"=>"Audi", "Peter"=>"Volvo", "Jack"=>"Skoda"} 

を書くことができます:

h = people 
    #=> {"Jack"=>1500, "John"=>3000, "Peter"=>2500, "Simon"=>4000} 
a = h.sort_by(&:last) 
    #=> [["Jack", 1500], ["Peter", 2500], ["John", 3000], ["Simon", 4000]] 
b = a.map(&:first) 
    #=> ["Jack", "Peter", "John", "Simon"] 
c = b.reverse 
    #=> ["Simon", "John", "Peter", "Jack"] 

h = cars 
    #=> {"Audi"=>50000, "BMW"=>70000, "Skoda"=>30000, "Volvo"=>40000} 
a = h.sort_by(&:last) 
    #=> [["Skoda", 30000], ["Volvo", 40000], ["Audi", 50000], ["BMW", 70000]] 
b = a.map(&:first) 
    #=> ["Skoda", "Volvo", "Audi", "BMW"] 
d = c.reverse 
    #=> ["Jack", "Peter", "John", "Simon"] 

私たちは、その後、

e = c.zip(d) 
    #=> [["Simon", "Jack"], ["John", "Peter"], ["Peter", "John"], ["Jack", "Simon"]] 
e.to_h 
    #=> {"Simon"=>"Jack", "John"=>"Peter", "Peter"=>"John", "Jack"=>"Simon"} 
関連する問題