1. ホーム
  2. ruby

[解決済み] Rubyで、配列からハッシュを作るにはどうしたらいいですか?

2023-07-11 01:04:52

質問

簡単な配列があります。

arr = ["apples", "bananas", "coconuts", "watermelons"]

また、関数 f という関数があり、これは一つの文字列の入力に対して操作を行い、値を返します。この演算は非常に高価なので、結果をハッシュにメモしておきたいと思います。

このようなもので目的のハッシュを作ることができるのは知っています。

h = {}
arr.each { |a| h[a] = f(a) }

hを初期化する必要がないので、このような書き方ができるようにしたいのです。

h = arr.(???) { |a| a => f(a) }

それは可能でしょうか?

どのように解決するのですか?

例えば、"f"という面白い名前の関数があるとします。

def f(fruit)
   fruit + "!"
end

arr = ["apples", "bananas", "coconuts", "watermelons"]
h = Hash[ *arr.collect { |v| [ v, f(v) ] }.flatten ]

が与える。

{"watermelons"=>"watermelons!", "bananas"=>"bananas!", "apples"=>"apples!", "coconuts"=>"coconuts!"}

更新しました。

コメントにあるように、Ruby 1.8.7ではこのためのより良い構文が導入されています。

h = Hash[arr.collect { |v| [v, f(v)] }]