0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Ruby】初心者がるりまを読んで初めて知ったメソッドをまとめてみる~Hash~

Last updated at Posted at 2021-03-13

最近るりまを読んでいるので、学習したメソッドから有用そうなものをまとめていこうと思います
たのしいRubyを読み終わったあたりの初心者が対象の記事です

以前紹介したものと似たようなメソッドは省略しているので、前の記事も是非

#Hashクラス
###self == other -> bool
selfotherが等しいか判定する演算子
キーを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
otherselfのサブセット(一部的な意味)である場合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
selfkeyをキーとする要素がある場合trueを返す

値を検索する value? もある

###fetch(key, default = nil) {|key| ... } -> object
keyに関連付けられた値を返す

キーがselfに登録されていない場合、

  1. 第二引数を与えているとその値を返す
  2. ブロックを与えているとkeyをブロック変数としてブロックを評価しその戻り値を返す
  3. どちらもなければ例外発生

という挙動を(デフォルト値を無視して)取る

ハッシュは配列と違い、存在しないキーを指定しても常にデフォルト値を返すので、基本[]でなくこのメソッドを使った方がいい

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
selfothersを結合した配列を返す

キーが重複する要素があったときは

  1. ブロックが与えられていればkey, selfの値, otherの値を変数としてブロックを評価してその戻り値を使用する
  2. 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!もある

#最後に
るりまをよむのはいいぞ。(るりまおじさん)
表現力が上がり、メソッドの詳しい挙動が知れることもあり、良い事づくめです
紹介してないメソッドも沢山あるのでぜひ

実際に使うことで覚えていくのも重要です

#シリーズ

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?