配列の中のハッシュを並び替えたいのですが、やり方が分からないので質問致します。
例えば
Ruby
1array = [ {1=>4}, {2=>6}, {3=>5} ]
という配列があったとします。
これを
Ruby
1[ {2=>6}, {3=>5}, {1=>4} ]
のように並び替える方法はあるのでしょうか?
ご教授お願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/21 09:52 編集
回答3件
0
ベストアンサー
Ruby
1array.sort_by!{|h| -h.values.first}
ですね。
「要素が1つしか無いハッシュの値の方」を一発で取り出す手段はないので、values.first
くらい。
降順なので-
を付けます。
投稿2020/10/21 14:51
総合スコア85949
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/22 00:49
2020/10/22 03:25
0
前回回答者です。
ちょっと強引ですが、以下でどうでしょうか。
array.sort!{|h1,h2| h2.flatten[1].to_i <=> h1.flatten[1].to_i}
irbの確認結果です。
irb(main):001:0> array = [ {1=>4}, {2=>6}, {3=>5} ]
irb(main):002:0> array.sort!{|h1,h2| h2.flatten[1].to_i <=> h1.flatten[1].to_i}
=> [{2=>6}, {3=>5}, {1=>4}]
irb(main):003:0> p array
[{2=>6}, {3=>5}, {1=>4}]
=> [{2=>6}, {3=>5}, {1=>4}]
ruby バージョンです。
[LINUX75 107] % ruby -v
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux]
投稿2020/10/21 13:14
総合スコア5493
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
array.sort!{|(k1,v1),(k2,v2)| v2<=>v1}
でどうでしょうか。
以下のスクリプトで確認しました。
Ruby
1array = [ {1=>4}, {2=>6}, {3=>5} ] 2p array 3array.sort!{|(k1,v1),(k2,v2)| v2<=>v1} 4p array 5
実行結果
[{1=>4}, {2=>6}, {3=>5}]
[{2=>6}, {3=>5}, {1=>4}]
投稿2020/10/21 11:28
編集2020/10/21 11:51総合スコア5493
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/21 11:40
2020/10/21 11:43
2020/10/21 11:47
2020/10/21 11:52
2020/10/21 11:55
2020/10/21 12:07 編集
2020/10/21 12:16
2020/10/21 12:19
2020/10/21 12:38
2020/10/21 13:28
2020/10/21 14:45
2020/10/22 00:56
2020/10/22 10:00
2020/10/22 11:18
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。