[解決済み] Rubyで配列をハッシュに変換する最良の方法は何ですか?
2022-06-20 23:04:30
質問
Rubyで、以下のいずれかの形式の配列が与えられた場合...
[apple, 1, banana, 2]
[[apple, 1], [banana, 2]]
...これをハッシュに変換するのに最適な方法は...の形式です。
{apple => 1, banana => 2}
どのように解決するのですか?
注意 : 簡潔で効率的なソリューションのために、以下を参照してください。 Marc-André Lafortuneの回答 をご覧ください。
この回答はもともと、執筆時に最も高くupvotedされたflattenを使用するアプローチの代替案として提供されたものです。この例をベスト プラクティスや効率的なアプローチとして提示するつもりはないことを明確にする必要がありました。オリジナルの回答は以下の通りです。
警告! を用いた解決策 フラット化 を使用した場合、配列のキーや値は保持されません!
John Topleyの人気のある回答に基づいて、試してみましょう。
a3 = [ ['apple', 1], ['banana', 2], [['orange','seedless'], 3] ]
h3 = Hash[*a3.flatten]
これはエラーを投げます。
ArgumentError: odd number of arguments for Hash
from (irb):10:in `[]'
from (irb):10
コンストラクタは偶数長のArray(例えば ['k1','v1,'k2','v2'] )を想定していました。 さらに悪いことに、偶数長にフラット化された別の配列は、不正確な値を持つハッシュを黙って与えるだけです。
配列のキーや値を使いたい場合は マップ :
h3 = Hash[a3.map {|key, value| [key, value]}]
puts "h3: #{h3.inspect}"
これは、Arrayのキーを保持します。
h3: {["orange", "seedless"]=>3, "apple"=>1, "banana"=>2}
関連
-
[解決済み】RVMをアンインストールする方法は?[重複] RVMのアンインストール方法
-
[解決済み] Rubyのcontinueに相当します。
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] Java の配列を表示する最も簡単な方法は何ですか?
-
[解決済み] JavaScriptで配列の先頭に新しい配列要素を追加するにはどうすればよいですか?
-
[解決済み] JavaScriptで変数が配列であるかどうかを確認する方法は?
-
[解決済み] Java 8 StreamをArrayに変換する方法は?
-
[解決済み] Ruby/RailsでHashからキーを削除して残りのHashを取得する方法は?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】RVMをアンインストールする方法は?[重複] RVMのアンインストール方法
-
[解決済み】rubyの1e18という数字は何を意味するのか?
-
[解決済み】Rubyで "gets "と "gets.chomp "を使用する方法
-
[解決済み] string literal in condition "とはどういう意味ですか?
-
[解決済み] Ruby: 文字列をブーリアンに変換する方法
-
[解決済み] Rubyで配列を平坦化するにはどうしたらいいですか?
-
[解決済み] ハッシュの配列を単一ハッシュにマッピングするRails
-
[解決済み] Rubyの予期しないキーワードの終了、および予期しない入力の終了
-
[解決済み] プロキシ(ISA-NTLM)の後ろからRuby Gemsをアップデートする方法
-
[解決済み] Rubyでガウス(正規分布)乱数を生成するコード