【Ruby】レッスン4-07:配列のfilterメソッドを理解しよう

記事内に商品プロモーションを含む場合があります

この記事で学べる知識:filterメソッド

この記事の練習問題を解くために必要な知識:
基礎文法、制御構造、メソッド(レッスン1~3)配列の基本配列の操作配列の調査配列の並び替えeachメソッドmapメソッドfilterメソッドハッシュ

<<前のページ Ruby記事一覧 次のページ>>

Rubyの「filterメソッド」とは

この章ではRubyにおける「filterメソッド」の意味や使い方を学習します。用語の解説が不要な方はここをクリックして練習問題へ飛びましょう。

Rubyのfilterメソッドは配列の中から特定の条件を満たす要素だけを取り出し、新しい配列を作成するための便利なメソッドです。

同様の機能を持つselectメソッドと全く同じ動作をします。

このメソッドを使うことで複雑な条件に基づいたデータの抽出が簡単にできるようになります。

初心者でも理解しやすいように、基本的な使い方から応用例まで詳しく解説します。

filterメソッドの使い方

基本的な使い方

まずはfilterメソッドの基本的な使用例を見てみましょう。

以下のコードは配列から偶数のみを抽出する例です。

# 配列を定義
numbers = [1, 2, 3, 4, 5, 6]

# filterメソッドで偶数を抽出
even_numbers = numbers.filter do |num|
  num.even? # 偶数かどうかを判定
end

# 結果を出力
puts even_numbers.inspect
# => [2, 4, 6]

コードの解説

  1. 配列numbersを定義します。
  2. filterブロック内ではnum.even?を使って各要素が偶数かどうかを判定します。
  3. 条件を満たす要素のみが新しい配列even_numbersに追加されます。
  4. 結果として、偶数のみを含む配列が出力されます。

filterメソッドの応用

より複雑な条件

filterメソッドは複雑な条件にも対応できます。

たとえば10以上の偶数を抽出する例を考えてみましょう。

# 配列を定義
numbers = [5, 10, 15, 20, 25, 30]

# 10以上の偶数を抽出
result = numbers.filter do |num|
  num.even? && num >= 10 # 偶数かつ10以上
end

# 結果を出力
puts result.inspect
# => [10, 20, 30]

まとめ

filterメソッドを使うと配列から条件に合う要素を簡単に抽出できます。

特に次のポイントを覚えておくと便利です。

  • 基本的な条件(例:偶数や特定の値以上)を使ったデータの抽出。
  • 結果は常に新しい配列として返され、元の配列には影響を与えない。

これを使いこなすことで、Rubyでのデータ操作がさらに楽しく効率的になるでしょう!

配列のfilterメソッドの練習問題:特定の条件に合う要素を抽出しよう

特定の文字で始まる単語だけを抽出するプログラムを作成しましょう。

与えられた単語の配列から、”a”で始まる単語のみを抽出するためにfilterメソッドを使います。

抽出した単語と元の配列を両方表示してください。

この問題の要件

以下の要件に従ってコードを完成させてください。

  1. wordsという名前の配列を作成し、以下の単語を格納すること。
    • "apple", "banana", "cherry", "apricot", "blueberry"
  2. filterメソッドを使用して、"a"で始まる単語のみを新しい配列に抽出すること。
  3. start_with?メソッドを使用して、各単語が指定の文字(`”a”)で始まるかどうかを判定すること。
  4. 元の配列と抽出した配列をそれぞれputsを使って表示すること。

ただし、以下のような実行結果となるコードを書くこと。

*****↓↓正解コードの実行結果の例↓↓*****

元の配列: ["apple", "banana", "cherry", "apricot", "blueberry"]
'a'で始まる単語: ["apple", "apricot"]

この問題を解くヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)

1:配列wordsを作成し、”apple”, “banana”, “cherry”, “apricot”, “blueberry”を格納
2:filterメソッドを使用して、words配列から’a’で始まる単語を抽出するブロックを定義
  □ start_with?メソッドを使用し、単語が”a”で始まるか判定
3:filterメソッドの結果を変数filtered_wordsに代入
4:「元の配列: 」とwordsの内容を出力
5:「’a’で始まる単語: 」とfiltered_wordsの内容を出力

ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

# 元の配列を定義
words = ["apple", "banana", "cherry", "apricot", "blueberry"]

# filterメソッドを使用して、'a'で始まる単語を抽出
=begin
【穴埋め問題1】
ここにfilterメソッドを使用し、配列wordsから「'a'で始まる単語のみを抽出するブロックを定義するコードを書いてください」。
=end

# 結果を表示
puts "元の配列: #{words}" # 元の配列を表示
puts "'a'で始まる単語: #{filtered_words}" # 条件を満たす単語を表示

以上がこの問題の穴埋めコードです。

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。



練習問題の解答と解説

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

例えば以下のようなプログラムが考えられます。

# 文字列を要素とする配列を定義
words = ["apple", "banana", "cherry", "apricot", "blueberry"]

# filterメソッドを使用して、'a'で始まる単語のみを抽出
filtered_words = words.filter do |word|
  word.start_with?("a") # 条件:文字列が'a'で始まること
end

# 結果を表示
puts "元の配列: #{words}" # 元の配列を表示
puts "'a'で始まる単語: #{filtered_words}" # 条件を満たす文字列を表示

正解コードの解説

今回作成したコードは配列からfilterメソッドを使って条件に一致する要素を抽出するプログラムです。

このコードの詳細をブロックごとに分けて解説します。

配列の定義

words = ["apple", "banana", "cherry", "apricot", "blueberry"]
  • 配列の定義: 配列wordsを作成し、5つの単語("apple", "banana", "cherry", "apricot", "blueberry")を格納しています。
  • 配列とは?: 配列は複数のデータを一つの変数にまとめて格納できるデータ構造です。ここでは、文字列を要素とする配列を定義しています。

filterメソッドによる抽出

filtered_words = words.filter do |word|
  word.start_with?("a") # 条件:単語が'a'で始まること
end
  1. filterメソッド: Rubyのfilter(別名select)メソッドは、配列の各要素に対してブロックを実行し、ブロックがtrueを返した要素を新しい配列に抽出します。
    • このコードでは、ブロック内でword.start_with?("a")を使い、単語が"a"で始まるかどうかを判定しています。
  2. start_with?メソッド:
    • start_with?は、文字列が指定した文字列で始まっているかを判定するメソッドです。
    • 例えば、"apple".start_with?("a")trueを返しますが、"banana".start_with?("a")falseを返します。
  3. 結果:
    • 配列wordsから、条件("a"で始まる単語)に一致する要素を抽出し、新しい配列filtered_wordsに格納します。

結果の表示

puts "元の配列: #{words}" # 元の配列を表示
puts "'a'で始まる単語: #{filtered_words}" # 条件を満たす単語を表示
  1. putsメソッド:
    • 標準出力(ターミナルやコンソール)にデータを表示するメソッドです。
    • `”#{}“の中に変数や式を入れると、その値が文字列として展開されます(式展開)。
  2. 出力結果の例:
    • 「元の配列」: ["apple", "banana", "cherry", "apricot", "blueberry"]
    • 「’a’で始まる単語」: ["apple", "apricot"]

まとめ

このプログラムではRubyのfilterメソッドを使って、配列の中から特定の条件を満たす要素を抽出する方法を学びました。

特にfilterメソッドとstart_with?メソッドの使い方を理解することで、データの操作を効率的に行えるようになります。

今回の例を応用し、他の条件(例えば、"b"で始まる単語や、5文字以上の単語を抽出するなど)でも試してみてください。

練習を重ねてRubyの配列操作に慣れていきましょう!

<<前のページ Ruby記事一覧 次のページ>>

この記事への質問・コメント

この記事を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    Rubyのテキスト&問題集トップへ戻る
    トップページへ戻る