rb
1a,b = gets.split(" ").map(&:to_i) 2c,d = gets.split(" ").map(&:to_i) 3ary = gets.split(" ").map(&:to_i) 4hash = Hash.new(0) 5 6hash[a] = ary[a-1] 7hash[b] = ary[b-1] 8hash[c] = ary[c-1] 9hash[d] = ary[d-1] 10p hash.sort{|(_,v1),(_,v2)| v2 <=> v1} 11 12# 1 3 13# 2 4 14# 40 10 30 20 15# [[1, 40], [3, 30], [4, 20], [2, 10]] 16
バリュー順にした後のハッシュ([1, 40], [3, 30], [4, 20], [2, 10]] )
をさらにバリュー値が最低以外のものをとりだし、新たなハッシュをhash2として hash2 = {1=>0,3=>0,2=>0}
と定義したいのですが、
配列的に言えばhash.sort{|(_,v1),(_,v2)| v2 <=> v1}
の部分を ary =[ [1, 40], [3, 30], [4, 20], [2, 10] ]
とすれば unless を使い実現できるのですが、ハッシュだとどのように扱うのでしょうか
ご教授お願いいたします。
「バリュー値が最低以外のものをとりだし、」だと、[1, 40], [3, 30], [4, 20]が取り出されますが、これが何故{1=>0,3=>0,2=>0}になるのでしょうか?
回答2件
あなたの回答
tips
プレビュー