最近るりまを読んでいるので、学習したメソッドから有用そうなものをまとめていこうと思います
たのしいRubyを読み終わったあたりの初心者が対象の記事です
以前紹介したものと似たようなメソッドは省略しているので、前の記事も是非
#Hashクラス
###self == other -> bool
self
とother
が等しいか判定する演算子
キーをeql?
で、値を==
で比較して、全て等しい要素を持つ場合true
を返す
※2つのハッシュが比較されるとき、キーをeql?
で、値を==
で判定することが多いので覚えておくと便利
※比較に順番は考慮されないので、考慮したい場合は to_a を使うとよし
hash = {a: 1, b: 2}
hash2 = {b: 2, a: 1}
hash == hash2 #=> true
hash.to_a == hash2.to_a #=> false
###self > other -> bool
other
がself
のサブセット(一部的な意味)である場合true
を返す
hash = {a: 1, b: 2, c: 3}
hash2 = {a: 1, b: 2}
hash > hash2 #=> true
ハッシュの比較演算子は他にも <](https://docs.ruby-lang.org/ja/3.0.0/method/Hash/i/=3c.html), [<=](https://docs.ruby-lang.org/ja/3.0.0/method/Hash/i/=3c=3d.html), [>= がある
###key?(key) -> bool
self
にkey
をキーとする要素がある場合true
を返す
値を検索する value? もある
###fetch(key, default = nil) {|key| ... } -> object
key
に関連付けられた値を返す
キーがself
に登録されていない場合、
- 第二引数を与えているとその値を返す
- ブロックを与えていると
key
をブロック変数としてブロックを評価しその戻り値を返す - どちらもなければ例外発生
という挙動を(デフォルト値を無視して)取る
ハッシュは配列と違い、存在しないキーを指定しても常にデフォルト値を返すので、基本[]
でなくこのメソッドを使った方がいい
key
を複数指定して配列で値を返す fetch_values もある
###keys -> [object]
全てのキーの配列を返す
値の配列を返す values もある
###slice(*keys) -> Hash
self
からkeys
に対応する要素だけを抜き出したハッシュを返す
hash = {a: 1, b: 2, c: 3}
hash.slice(:a, :b) #=> {:a=>1, :b=>2}
対応しない要素だけを抜き出す except もある
###assoc(key) -> Array | nil
key
をキーとして持つ要素をキーと値のペアの配列として返す
hash = {a: 1, b: 2}
hash.assoc(:a) #=> [:a, 1]
値を検索する rassoc もある
###flatten(level = 1) -> Array
self
を平坦化した配列を返す
hash = {a: 1, b: [2, 2.0]}
hash.flatten #=> [:a, 1, :b, [2, 2.0]]
level
のデフォルト値が1なので引数を与えないと上記の様になるが、-1を与えると完全に平坦化してくれる
hash = {a: 1, b: [2, 2.0]}
hash.flatten(-1) #=> [:a, 1, :b, 2, 2.0]
###invert -> Hash
キーと値を反転したハッシュを返す
重複する値があった場合、最後に定義されたものが使用される
hash = {a: 1, b: 2, c: 3, d: 3}
hash.invert #=> {1=>:a, 2=>:b, 3=>:d}
###merge(*others) -> Hash
self
とothers
を結合した配列を返す
キーが重複する要素があったときは
- ブロックが与えられていれば
key
,selfの値
,otherの値
を変数としてブロックを評価してその戻り値を使用する -
other
の値を使用する
という挙動になる
破壊的である merge!
もある
###to_h -> self | Hash
self
を返す
ブロックを与えるとキーと値を変数としブロックを評価し、戻り値の配列をペアとして使う(平たく言うとハッシュのmap
)
hash = {a: 1, b: 2}
hash.to_h { |k, v| [k, v * 10] } #=> {:a=>10, :b=>20}
###transform_keys {|key| ... } -> Hash
すべてのキーをイテレートして、ブロックの戻り値でキーを書き換えたハッシュを返す(キーのmap
)
※対応表的なハッシュを引数として与えることもできます
hash = {a: 1, b: 2}
hash.transform_keys { |k| k.to_s } #=> {"a"=>1, "b"=>2}
hash.transform_keys({a: "a", b: "bb"}) #=> {"a"=>1, "bb"=>2}
値のmap
であるtransform_values
や、破壊的であるtrasform_keys!
とtransform_values!
もある
#最後に
るりまをよむのはいいぞ。(るりまおじさん)
表現力が上がり、メソッドの詳しい挙動が知れることもあり、良い事づくめです
紹介してないメソッドも沢山あるのでぜひ
実際に使うことで覚えていくのも重要です
#シリーズ
- 【Ruby】初心者がるりまを読んで初めて知ったメソッドをまとめてみる~Array~
- 【Ruby】初心者がるりまを読んで初めて知ったメソッドをまとめてみる~Hash~ <=ここ