nilが結果として帰ってきた場合、その要素は最初から含めないようにするmapのようなメソッド
例えば、ある配列で、その要素が3の倍数のときのみ、その要素を掛け合わせた配列を新たに作りたいとします。具体的には[3, 5, 9]
という配列が与えられた場合、期待している結果の配列が[9, 81]
であるとします。このような判定を実現するためには、下のようなコードで出来ます:
[3, 5, 9].map { |x| x * x if x % 3 == 0 }.select { |x| !!x }
あるいは:
[3, 5, 9].select { |x| x % 3 == 0 }.map { |x| x * x }
といったように。
確かに上のように書くことは可能なのですが、個人的には、map
の中で、帰ってくる結果がnil
であるならば、それを配列の要素に含みたくないことを、select
を使わずに表現したいと思っています。想定しているのは、以下の使い方に近い書き方です:
[3, 5, 9].map { |x| x * x if x % 3 == 0 }
もちろん、このままだとnil
の要素も含まれてしまうので、上のような希望を達成することが出来ません。上記のような希望を実現できるメソッド、あるいは方法がもしあれば教えてください。