LoginSignup
29

More than 5 years have passed since last update.

[Ruby]Hashにmapで値を変換したHashを作成する

Last updated at Posted at 2016-04-13

本記事のサマリ

単純なkey->value(数値や文字列)などを管理しているHashに対して、mapを使って値を操作した結果を、配列ではなくHashにしたい場合、Ruby2.1以降ならto_hを使うとうまく表現できますよというお話。

対象読者

Hash#mapの結果をHashにしたいRubyistの皆様

動作確認バージョン

ruby --version
ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-darwin15]

経緯

Hashの全要素に対して、フォーマット変換かけたようなHashを作りたくなったので。

やってみた

例えば、key1〜key3で値が数値からなるHashがあり、それを全て5桁0埋めにしたいようなケースがあったとします。
その場合は、以下のように、Hashに対して、mapをかけた時に、mapに渡したブロックの戻りを[key,new_value]のような形(ここで、new_valueは、フォーマット変換などをして得られた新たな値にします。)で返し、それをto_hでhashにすると綺麗に書けます。

↓こんな感じ

hash = { key1: 1000, key2: 300, key3: 10000}
hash.map {|key,val| [key,val.to_s.rjust(5,'0')]}.to_h

{
:key1 => "01000",
:key2 => "00300",
:key3 => "10000"
}

地味に使うケースがありそうなので、備忘録として残します。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29