LoginSignup
3
1

More than 5 years have passed since last update.

デフォルト値としてキー自身を返すハッシュ

Last updated at Posted at 2017-06-28

恒等写像とも言えるだろうか。

#初期化時にデフォルト値を定義する
hash = Hash.new{|h, k| h[k] = k}

#初期化時以外にデフォルト値のブロックを設定する場合
hash.default_proc = ->(h, k){h[k] = k}

p hash[1]
=> 1

p hash[:a]
=> :a

応用

上のままだとほとんど何もしないハッシュになるが、「特定の値のみ変換して残りの値は変換しないハッシュ」などといったものが定義できる。

old_departments = ["機械工学科", "電気工学科", "電子制御工学科", "工業化学科"]
rename = {
      "電気工学科" => "電気電子工学科",
      "工業化学科" => "物質工学科"
  }
rename.default_proc = ->(h, k){ h[k] = k }
p new_departments = old_departments.map{|f| rename[f] }
=> ["機械工学科", "電気電子工学科", "電子制御工学科", "物質工学科"]

規則性のない大量のキーをベタで変換するような場合には簡潔に書けると思う。
ただ書いていてswitch使ったほうがよくねとも思い始めてきた。小ネタとして。

3
1
2

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
3
1