share facebook facebook twitter menu hatena pocket slack

2017.06.06 TUE

Ruby の find と select

川原 洋平

WRITTEN BY 川原 洋平

うっかり混同しそうになっていたので

忘れないうちにメモっておきたいと思います。

参考

有難うございます。

Enumerable モジュール

上記サイトを言葉を引用させて頂くと、

Enumerableモジュールは、配列やハッシュなど集合を表すクラスに数え上げや検索などのメソッドを提供します。

find や select は Enumerable モジュールにより提供されているとのことです。

メモ

環境

ubuntu@ubuntu-xenial:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.2 LTS"

ubuntu@ubuntu-xenial:~$ ruby --version
ruby 2.3.1p112 (2016-04-26) [x86_64-linux-gnu]

select

以下のように 2 で割り切れる要素全てを配列で返す。つまり、{ } ブロックが true となる要素全てを配列で返すのが select ということでしょうか。

irb(main):001:0> [1, 2, 3, 4, 5, 6].select { |n| n % 2 == 0 }
=> [2, 4, 6]

ちなみに select と同じ機能を提供するが find_all で、以下のように同じ結果が得られます。

irb(main):003:0> [1, 2, 3, 4, 5, 6].find_all { |n| n % 2 == 0 }
=> [2, 4, 6]

find

以下のように 2 で割り切れる要素の最初の要素を返す。select に対して { } ブロックが true となる最初の要素を返すのがfindということでしょうか。

irb(main):002:0> [1, 2, 3, 4, 5, 6].find { |n| n % 2 == 0 }
=> 2

find と同じ機能を提供するのが detect で、以下のように同じ結果が得られます。

irb(main):004:0> [1, 2, 3, 4, 5, 6].detect { |n| n % 2 == 0 }
=> 2

以上

select は

  • ブロックが true となる要素全部を配列で返します
  • find_all という別名があります

find

  • ブロックが true となる最初の要素を返します
  • detect という別名があります

元記事はこちら

Ruby の find と select

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。