5
1

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 1 year has passed since last update.

【Ruby】知っておくといつか役立ちそうな配列・ハッシュのメソッド6選

Last updated at Posted at 2023-10-02

はじめに

もうすぐ入社1年になるエンジニアです。
最近、開発チームの勉強会で「良いコード悪いコード」という本を読みました。その本の、コレクション(※)に関する説明で、車輪の再発明をせずに標準ライブラリに用意されているメソッドを使おうと書かれていて、確かにあるものは使うべきだなと思いました。
そこで、配列とハッシュのメソッドを調べてみたので、知らなかったけど使う機会がありそうなメソッドや知らない人は車輪の再発明してしまいそうなメソッドを6つ紹介しようと思います。

※ コレクション:複数のデータをまとめて格納するためのデータ構造。rubyでは、配列やハッシュなどがある。

配列・ハッシュ共通のメソッド

selectメソッド

selectメソッドは、配列の各要素に対して条件式を満たす要素のみで構成される新しい配列を返します。ハッシュの場合も同様です(例を参照)。

# 基本構文
配列.select { |変数| 条件式 }
ハッシュ.select { |変数1, 変数2| 条件式 }

# 配列の例
array = [1, 2, 3, 4, 5]
new_array = array.select { |elem| elem  < 3 }
pp new_array # => [1, 2]

# ハッシュの例
hash = { a: 1, b: 2, c: 3 }
new_hash = hash.select { |key, value| value >= 2 }
pp new_hash # => { b: 2, c: 3 }

rejectメソッド

rejectメソッドは、selectメソッドとは逆に、配列の各要素に対して条件式を満たさない要素のみで構成される新しい配列を返します。ハッシュの場合も同様です(例を参照)。

# 基本構文
配列.reject { |変数| 条件式 }
ハッシュ.reject { |変数1, 変数2| 条件式 }

# 配列の例
array = [1, 2, 3, 4, 5]
new_array = array.reject { |elem| elem >= 2 && elem <= 4  }
pp new_array # => [1, 5]

# ハッシュの例
hash = { a: 1, b: 2, c: 3 }
new_hash = hash.reject { |key, value| value == 2 }
pp new_hash # => { a: 1, c: 3 }

findメソッド

findメソッドは、ブロック内で指定した条件式を満たす最初の要素を取得します。ただし、条件式を満たす要素が存在しない場合は、nilを返します。
自分は、コードレビューの時に~.select { ~ }[0]という処理を見たのですが、その時はまだfindメソッドを知らなかったのでスルーしてしまった記憶があります。

# 基本構文
配列.find { |変数| 条件式 }
ハッシュ.find { |変数1, 変数2| 条件式 }

# 配列の例
array = [1, 2, 3, 4]
elem = array.find { |elem| elem % 2 == 0 }
pp elem # => 2

# ハッシュの例
hash = { a: 1, b: 2, c: 3 }
elem = hash.find { |key, value| value % 2 == 0 }
pp elem # => [:b, 2] ハッシュの場合は、キーとバリューの配列を返すので注意
pp elem.to_h # => { b: 2 } 

配列のメソッド

grepメソッド

grepメソッドは、引数に正規表現を指定してパターンにマッチした要素を配列として返します。

# 基本構文
配列.grep(/正規表現/)

array = ['aaa', 'aab', 'abb', 'bbb']
new_array = array.grep(/^a.b$/) # aで始まるbで終わるパターンのみ取得
pp new_array # => ['aab', 'abb']

ハッシュのメソッド

key?メソッド

ハッシュが引数で指定した値をキーとして持つ場合はtrue、持たないはfalseを返します。
同様のメソッドにvalue?メソッドもあります。
全く同じ挙動ではありませんがkey?メソッド知らないと、hash[:key] != nilのように書いてしまいそうですね。

# 例
hash = { a: 1, b: 2, c: 3 }
pp hash.key?(:a) # => true
pp hash.key?(:z) # => false

transform_valuesメソッド

全てのバリューに対してブロック内の処理を実行した結果で置き換えたハッシュを返します。キーは変化しません。
このメソッドを知らないで、hash.map { |key, value| keyを使わない処理 }のように書いてしまいそうですね。
同様のメソッドに、transform_keysメソッドもあります。

# 基本構文
ハッシュ.transform_values { |変数| 実行する処理 }

# 例
hash = { a: 1, b: 2, c: 3 }
new_hash = hash.transform_values { |value| value * 2 }
pp new_hash # => { a: 2, b: 4, c: 6 }

おわりに

配列やハッシュのメソッドを6つ紹介しましたが、知らないメソッドはあったでしょうか?
使えそうだなと思ったメソッドがあれば、頭の片隅にでもいれておくと、実装を考える際に役立つことがあると思います。

参考記事

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?