「collectメソッドと同じメソッドを選べ」という問題は頻出なので、この際にまとめようとおもいます
selectメソッド
selectメソッドは、調べたブロックが真であった場合、その要素を返すメソッドです。
真であるものがなかったら、空の配列が返ってきます
(1..10).select {|i| i % 2 == 0 }
=> [2, 4, 6, 8, 10]
[3, 5, 7, 9].select {|i| i % 2 == 0 }
=> []
似てるけど、違うメソッド
rejectメソッド
rejectメソッドは、調べたブロックの中で、偽であった要素を返すメソッドです。
偽であるものがなかったら、空の配列が返ってきます
(1..10).reject { |i| i % 2 == 0 }
=> [1, 3, 5, 7, 9]
[2, 4, 6].reject { |i| i % 2 == 0 }
=> []
grepメソッド
条件に一致した要素を配列で返します。条件に一致した要素がなかった場合、空の配列が返ってきます。
参考資料にも書いてある通り、grepメソッドは正規表現やブロックなども評価できるんです。
["hoge", "bazz", "str"].grep(/[b|h]/)
=> ["hoge", "bazz"]
(1..10).grep 1..3
=> [1, 2, 3]
grep_vメソッド
grepメソッドの逆ですね。
["hoge", "bazz", "str"].grep_v(/[b|h]/)
=> ["str"]
(1..10).grep_v 1..3
=> [4, 5, 6, 7, 8, 9, 10]
detectメソッド
findメソッドと同一のメソッドです。名前の通り、条件に一致した最初の要素を取り出すメソッドです。
(1..10).detect {|i| i % 3 == 0 }
=> 3
(1..10).find {|i| i % 3 == 0 }
=> 3
mapメソッド
要素の数だけブロックの処理を行い、配列で処理を返します
collectメソッドと同じ処理をします
(1..10).map {|i| i % 3 == 0 }
=> [false, false, true, false, false, true, false, false, true, false]
(1..10).collect {|i| i % 3 == 0 }
=> [false, false, true, false, false, true, false, false, true, false]
(1..4).map {|i| i * 2}
=> [2, 4, 6, 8]
(1..4).collect {|i| i * 2}
=> [2, 4, 6, 8]
実際に問題を解いてみましょう
今回の選択肢でいえば、collectと同じなのは、mapメソッドでしたね。
なので、選択肢➃が正解になります。
rubyは同じ動作をするメソッドでも複数の書き方があるみたいですね。
【参考資料】