selectとreject
CoddyのRubyジャーニー「ロジックとフロー」セクションの一部。レッスン 21/56。
selectメソッドは、ブロックが真と評価される値を返す要素だけを含む新しい配列を返します。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"]チャレンジ
初心者カンマ区切りの整数のリストを読み取ります。2行を出力します。
10より大きい数(selectを使用)を、,で連結したもの3で割り切れない数(rejectを使用)を、,で連結したもの
入力が3,7,12,15,20の場合、出力は次のようになります。
12, 15, 20
7, 20自分で試してみよう
numbers = gets.chomp.split(",").map(&:to_i)
# TODO: 1行目、numbers > 10、", " で結合
# TODO: 2行目、3で割り切れない numbers、", " で結合
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
5Enumerableの強力な機能
selectとrejectmapの連結reduce / injectcount、all?、any?、none?group_byとpartitionsort_by、min_by、max_by振り返り - データパイプライン自分で練習してみよう: Rubyオンラインコンパイラ