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)やってます。フォローしてもらえるとうれしいです!