Search

検索したいワードを入力してください

2019年02月19日

Rubyで配列の要素を検索するための6個のメソッドまとめ

配列の作り方を覚えても、その検索方法がわからなければ配列の使い道がありません。Rubyには配列を検索するメソッドがいくつかあります。そこでこの記事では、それぞれの特徴を解説しています。Rubyの配列の検索を理解したい方はまずこの記事をぜひご覧ください

配列の検索とは

プログラミング言語「Ruby」を使用して配列を作ると、その中から要素を検索する必要性が出てきます。

もちろん、配列の中身を表示して自分で確認することも可能ですが、要素の数が多かったり、特定の条件に基づく要素を取り出したい場合にメソッドを使った方が正確かつスピーディーに処理できます。

Rubyには検索のための便利なメソッドがいくつかありますので、これから解説していきます。

Rubyのその他の配列操作に関する記事はこちら
Rubyの配列の要素や配列自体を削除する方法
Rubyの配列の要素数を数える方法
Rubyの配列を結合する方法
Rubyの配列を並び替える(ソート)方法
Rubyの配列を初期化する方法
Rubyで配列要素を追加する方法

Rubyの配列の検索方法まとめ

どのような場面で配列の検索が必要になるでしょうか。例えば、配列の中に日本の都道府県が入っていたとします。

そこで、ローマ字表記が5文字の探さなくてはいけない場合、検索が便利になります。もちろん、中身を見ることで確認することはできますが、47都道府県全て確認するのは大変です。

また、各都道府県の配列を作っておき、その県庁所在地を調べる方法はないでしょうか。実はこれも配列の中に各都道府県とその県庁所在地のペアを作っておくことで容易に検索をかけることができます。

このように、配列の検索には(1)配列から要素を検索する場合と(2)配列から配列を検索する場合の大きく二つに分けることができます。実際に具体例を挙げて確認していきましょう。

配列から要素を検索する

まず、配列から要素を検索するためには、select/find_allメソッド、rejectメソッド、detect/findメソッドが使用できます。スペルを見ただけでは、違いがわかりにくいですが、それぞれ明確な違いがあります。

Rubyのselect/find_allメソッドは配列の中の要素にブロックが処理された結果、真だったものを配列として返します。

rejectメソッドでは、配列の要素にブロックを処理した結果、真だった要素が配列から取り除かれます。

detect/findメソッドは、配列の要素にブロックを処理した結果、真だった最初の要素を返します。

なお、配列のブロックとは、メソッド実行時に渡される処理のことで、今回のメソッドでは{}の中に囲まれている中身のことです。

他の2つのメソッドと異なり、rejectメソッドは真となるものを取り除くメソッドであることに注意しておいてください。

select/find_allメソッドを使って配列要素を検索する方法

Rubyのselect/find_allメソッドはそれぞれarray.select {|item| (処理する事柄)}、array.find_all {|item| (処理する事柄)}として使います。


members = ["Paul", "John", "George", "Ringo"]
p members.find_all {|member| member.length == 4 }
#→["Paul", "John"]
p members
#→["Paul", "John", "George", "Ringo"]
p members.select {|member| member.length == 4 }
#→["Paul", "John"]


配列membersの各要素memberに対して、文字が4つあるものを取り出して配列にしています。破壊的メソッドではなく、あくまで検索に使うものですので、処理後配列の中身は変わっていないことに注意してください。

rejectメソッドを使って配列要素を検索する方法

Rubyのrejectメソッドはarray.reject{ |item|(処理する事項)}です。


members = ["Paul", "John", "George", "Ringo", "Bandmate"]
p members.reject {|member| member.length > 6 }
#→["Paul", "John", "George", "Ringo"]
p members
#→["Paul", "John", "George", "Ringo", "Bandmate"]
p members.reject! {|member| member.length > 6 }
#→["Paul", "John", "George", "Ringo"]
p members
#→["Paul", "John", "George", "Ringo"]

破壊的メソッドとしてrejectに「!」を加えると配列membersが書き換えられることを覚えておいてください。

detect/findメソッドを使って配列要素を検索する方法

Rubyのdetect/findメソッドはそれぞれarray.detect{ |item| (処理する事項)}、array.find{ |item| (処理する事項)}で使うことができます。

members = ["Paul", "John", "George", "Ringo"]
p members.detect {|member| member.length == 4 }
#→"Paul"
p members
#→["Paul", "John", "George", "Ringo"]
p members.find {|member| member.length == 4 }
#→"Paul"

文字数が4のメンバーは"Paul"と"John"ですが、"Paul"のみ該当しています。このメソッドは配列ではなく、該当する最初の要素が返されるのが、他メソッドとの大きな違いです。

また、破壊的メソッドではないので、配列の中身は変わらないことを覚えておきましょう。

配列から配列を検索する方法

冒頭で触れましたが、例えば、都道府県を入力したらその都道府県庁所在地を取り出すという場合に、配列から配列を検索する方法があります。

配列ではなく、ハッシュクラスを使うことでキーと値を設定し、検索する方法もありますが、配列とハッシュはそれぞれ使えるメソッドも若干異なり、それぞれメリットデメリットがあるので、ここではまず配列を使うやり方を覚えましょう。

Rubyのassocメソッドを使うことで、配列から配列を検索することができます。都道府県とその県庁所在地を示す配列citiesを作り、実際のコードをこれからみていきましょう。

cities = [["Kanagawa","Yokohama"], ["Osaka", "Osaka"], ["Aichi", "Nagoya"], ["Hokkaido", "Sapporo"], ["Fukuoka", "Fukuoka"]]

assocメソッドを使う方法

Rubyのassocメソッドはarray.assoc(key)の形で使用されます。早速、上記で設定した配列citiesにメソッドを利用しましょう。

p cities.assoc('Aichi')
#→ ["Aichi", "Nagoya"]
p cities
#→ [["Kanagawa", "Yokohama"], ["Osaka", "Osaka"], ["Aichi", "Nagoya"], ["Hokkaido", "Sapporo"], ["Fukuoka", "Fukuoka"]]

今回、'Aichi'をkeyに入れたので、それに対応する配列["Aichi", "Nagoya"]が出力されています。'Aichi'に対応する要素の'Nagoya'が単独で出力されないことに注意してください。

破壊的メソッドではないので、配列は書き換えられません。

どのメソッドを使うべきか

ここまで、Rubyで配列の要素を検索するための4つの方法を紹介しました。しかし、findメソッドがあればfind_allメソッドもあり、少し紛らわしいです。ここでそれぞれの特徴をもう一度まとめておきましょう。

まず配列の検索には、要素を検索するselect/find_all、reject、detect/findメソッド、そして配列から配列を検索するassocメソッドがあります。

さらに、要素の検索時に真であるものを返すselect/find_all、detect/findメソッドと真であるものを取り除くrejectメソッドに分けることができます。そして、select/find_allメソッドは配列が返る一方でdetect/findメソッドは最初の要素が返されます。

各メソッドを試してみることで、より違いを実感することができると思うので、ご自身で配列を作ってコーディングしてみてください。

Rubyのその他の配列操作に関する記事はこちら
Rubyの配列の要素や配列自体を削除する方法
Rubyの配列の要素数を数える方法
Rubyの配列を結合する方法
Rubyの配列を並び替える(ソート)方法
Rubyの配列を初期化する方法
Rubyで配列要素を追加する方法

【PR】多くの人がプログラミングを諦めてしまう理由をご存知ですか?



近年プログラミングを勉強する人が増えています。

プログラミング学習者の多くは独学から取り組もうとしますが、だいたい80%ほどは3ヶ月も続かずに諦めてしまいます。早い人は1日目で。

多くの人がプログラミングを独学しようとして諦める理由は、次の3つ。
●モチベーションが維持できない
●エラーの原因・解決方法が分からない
●どう学習すればよいか分からない

TechBoostというプログラミングスクールでは、みんなと一緒にプログラミングをするのでモチベーションの維持ができ、分からないことがあればマンツーマンで教えてくれ、徹底的に研究された初心者向けの教材が揃っています。

TechBoostを卒業後、実際にエンジニアとして転職した方もいるほど。

本気でプログラミングを学びたい方は、一度無料のカウンセリングでご相談ください。プログラミングを嫌いになる前に。

tech boostについて

オーダーメイド型の学習コンテンツを提供する「tech boost」 は、エンジニアのキャリア支援に特化したサービスを複数展開している株式会社Branding Engineerが運営しているプログラミングスクールです。最短3ヶ月間で、未経験から『プログラミングの基礎』、『実際に業務で必要となるスキル』、『今のトレンドとなっている知識』まで学べ、ご希望の方にはプロのキャリアアドバイザーによる就業支援を行うことができます。

tech boost卒業生インタビュー

tech boostの卒業生の声を聞きました。あなたがプログラミングを学びたい理由を、一度考えてみてください。
営業→Javaエンジニア→Rubyエンジニアと転向し、第一志望のFinTech企業で働く山下さん
元営業、ビジネスのわかるエンジニアを目指す菅原さん
サンフランシスコに交換留学し、シリコンバレーのVCでインターン中の梅本さん
予備校の営業から半年でエンジニア転職を果たした小田島さん

tech boostの口コミ



Related