質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

196閲覧

hashから新たなhash ruby

t.s_k

総合スコア61

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2018/10/15 04:12

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 を使い実現できるのですが、ハッシュだとどのように扱うのでしょうか

ご教授お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2018/10/15 05:11

「バリュー値が最低以外のものをとりだし、」だと、[1, 40], [3, 30], [4, 20]が取り出されますが、これが何故{1=>0,3=>0,2=>0}になるのでしょうか?
guest

回答2

0

ベストアンサー

rb

1p hash.sort_by(&:last).drop(1).to_h

以下テストコード

rb

1$stdin = StringIO.new <<TEST_DATA 21 3 32 4 440 10 30 20 5TEST_DATA 6 7a,b = gets.split(" ").map(&:to_i) 8c,d = gets.split(" ").map(&:to_i) 9ary = gets.split(" ").map(&:to_i) 10hash = Hash.new(0) 11 12hash[a] = ary[a-1] 13hash[b] = ary[b-1] 14hash[c] = ary[c-1] 15hash[d] = ary[d-1] 16 17p hash 18p hash.sort_by(&:last).drop(1).to_h

投稿2018/10/15 05:15

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Hash は、 [key,value] のArray、だと認識すると捗るよ。
to_h で、そういうArrayはHashになるし

投稿2018/10/15 04:26

kiichi54321

総合スコア1984

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問