map(collect)
mapは各要素を変換して新たな配列を作成するメソッドです。collectはmapのエイリアス(等価のメソッド)です。
オブジェクトのプロパティや配列の要素から新たな配列を作成したい場合にmapが活躍します。
mapの実行結果は以下の通りです。
### 各要素を加工して新たな配列を作成
> [1, 2, 3].map { |value| value * 2 }
=> [2, 4, 6]
mapを利用することでオブジェクトを要素にもつ配列も作成できます。具体例は以下の通りです。
> user_names = ["user_1", "user_2", "user_3"]
> users = user_names.map { |name| { name: name } }
=> [{:name=>"user_1"}, {:name=>"user_2"}, {:name=>"user_3"}]
### Arrayの要素としてオブジェクトがセットされている
> users[0][:name]
=> "user_1"
mapの詳細解説およびmapの派生メソッドであるfilter_map・flat_map(collect_concat)の概要は【Ruby】map/filter_map/flat_mapの概要と使い方で紹介しています。
compact
compactはnilの要素を除去するメソッドです。
compactの実行結果は以下の通りです。
### nilの要素を除去
> [1, nil, 2, nil, 3, nil].compact
=> [1, 2, 3]
uniq
uniqは要素の重複を除くメソッドです。
uniqの例は以下の通りです。
> [1, 2, 2, 3].uniq
=> [1, 2, 3]
flatten
flattenは多次元配列を1次元配列に変換するメソッドです。
flattenの実行結果は以下の通りです。
### 2次元配列を1次元配列に変換
> [[1, 2], [3, 4], [5, 6]].flatten
=> [1, 2, 3, 4, 5, 6]
### 3次元配列を1次元配列に変換
> [[[1]], [[2]], [[3]]].flatten
=> [1, 2, 3]
mapとflattenを組み合わせたflat_mapというメソッドも存在します。
flat_mapの概要およびflat_mapとflattenの違いについては【Ruby】map/filter_map/flat_mapの概要と使い方で紹介しています。
+メソッド
+は配列を連結するメソッドです。
+を利用した配列の結合は以下の通りです。
> array1 = ['a', 'b']
> array2 = ['c', 'd']
> array3 = ['e', 'f']
> array1 + array2 + array3
=> ["a", "b", "c", "d", "e", "f"]
配列を結合するメソッドは+のほかにconcat、append(push)、<<があります。配列を結合するメソッドの違いの詳細解説は【Ruby】複数の配列を1つの配列に結合するメソッドまとめで紹介しています。
filter(select)
filterは条件を満たす全ての要素を取り出すメソッドです。selectはfilterのエイリアス(等価のメソッド)です。
filterの例は以下の通りです。
> [1, 2, 3, 4, 5, 6].filter {|i| i % 3 == 0 }
=> [3, 6]
filterにはfind(detect)という似たメソッドが存在します。filterは条件を満たす要素全てを返すのに対し、findは条件を満たした要素のうち最初の要素のみを返します。
filterとfindの違いの詳細解説はRubyのfilter(select)とfind(detect)の違いで紹介しています。
今回のまとめ
- 要素を変換して新しい配列を作成する場合はmap
- 要素からnilを除く場合はcompact
- 要素から重複を除く場合はuniq
- 多次元配列を1次元配列にする場合はflatten
- 配列を結合する場合は『+メソッド』
- 特定の要素のみ抽出したい場合はfilter
さいごに
Twitter(@nishina555)やってます。フォローしてもらえるとうれしいです!



