Menu
Coddy logo textTech

Select と Reject

CoddyのRubyジャーニー「ロジックとフロー」セクションの一部 — レッスン 21/56。

select メソッドは、ブロックが真(truthy)な値を返す要素のみを含む新しい配列を返します。これは Ruby における「filter」の書き方です。

numbers = [1, 2, 3, 4, 5, 6]
evens = numbers.select { |n| n.even? }
puts evens.inspect   # [2, 4, 6]

reject はその逆で、ブロックが false を返すものをすべて保持します:

odds = numbers.reject { |n| n.even? }
puts odds.inspect    # [1, 3, 5]

両方とも新しい配列を返します。元の配列は変更されません。

ブロックは単なる述語であり、true または false と評価されるものであれば何でも機能します:

words = ["hi", "hello", "hey", "yo"]
long  = words.select { |w| w.length >= 3 }
puts long.inspect    # ["hello", "hey"]
challenge icon

チャレンジ

初心者

カンマ区切りの整数のリストを読み込みます。次の2行を出力してください:

  1. 10 より大きい数値(select を使用)、", " で連結したもの
  2. 3 で割り切れない数値(reject を使用)、", " で連結したもの

入力が 3,7,12,15,20 の場合、出力は次のようになります:

12, 15, 20
7, 20

チートシート

select は、ブロックが真(truthy)を返す要素を持つ新しい配列を返します("filter" のような動作です):

evens = [1,2,3,4].select { |n| n.even? }  # [2, 4]

reject はその逆で、ブロックが偽(falsy)を返す要素を保持します:

odds = [1,2,3,4].reject { |n| n.even? }   # [1, 3]

どちらも新しい配列を返します。元の配列は変更されません。

自分で試してみよう

numbers = gets.chomp.split(",").map(&:to_i)

# TODO: 1行目、10より大きい数値、", "で結合
# TODO: 2行目、3で割り切れない数値、", "で結合
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン