[解決済み] RubyのHashをキーでアルファベット順にソートする方法
2022-02-10 07:06:31
質問
Hashをアルファベット順にキーでソートしたいのですが、独自のSortingクラスを作成しないと方法が見つからないようです。以下のコードで、整数の場合は値でソートすることを発見しました。
temp["ninjas"]=36
temp["pirates"]=12
temp["cheese"]=222
temp.sort_by { |key, val| key }
私の目標は、Hashをキーで並べ、その値を出力することです。同じ値で異なるハッシュの順序で何度も実行する必要があります。
どのように解決するのですか?
ソートされた順にキーを反復するハッシュを出力したいのであれば、もう少しで完了です。
Hash#sort_by
は
Array
の
Array
であり、内側の配列はすべて2要素である。
Rubyの
Hash
には、この出力を消費するコンストラクタがあります。
これを試してみてください。
temp = Hash[ temp.sort_by { |key, val| key } ]
またはもっと簡潔に
temp = temp.sort_by { |key| key }.to_h
ハッシュのキータイプが混在している場合、これは機能しません(Ruby は自動的に
String
と
Symbol
のようなエラーメッセージが表示されます。
シンボルと文字列の比較に失敗しました (ArgumentError)
. もしそうなら、上記を次のように変更することができます。
temp = Hash[ temp.sort_by { |key, val| key.to_s } ]
を使用して、この問題を回避することができます。しかし、キーは元の型を保持したままなので、後のコードで仮定に問題が生じる可能性があることに注意してください。また、ほとんどの組み込みクラスは
.to_s
メソッドを使用すると、予期しない結果 (数値キーの予期しないソート順や、予期しない型など) を得る可能性があります。
できるはずです。
さらに
に変換します。
Strings
というような内容で。
temp = Hash[ temp.map { |key, val| [key.to_s, val] }.sort ]
. しかし、この方法では、元のキーのタイプに関する情報が失われるため、元のデータを確実に参照することは不可能です。
関連
-
[解決済み] Rubyでファイルを移動するにはどうしたらいいですか?
-
[解決済み] 山積みされた靴下を効率よく組み合わせるには?
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] 辞書のリストを辞書の値でソートするにはどうしたらいいですか?
-
[解決済み] Rubyのswitch文の書き方
-
[解決済み] List<T>をオブジェクトのプロパティでソートする方法
-
[解決済み] Rubyで配列に値が存在するかどうかを確認する方法
-
[解決済み] データフレームの行を複数の列でソート(並び替え)する。
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン