😾

Ruby初学者が学んだメソッドを整理(map/each/product)

2023/10/28に公開

前提

・学んだメソッドをアウトプットする。
・調べて記載するつもりだけど、間違った解釈で記載している可能性もあるので注意

・map

mapは配列の各要素に対して、記述した処理を行って、新しい配列を作成してくれる。

int = (1..10)

double_int = int.map do |i|
  i * 2
end

p double_int
#[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

また「&」を使った省略形で書くこともできる。

num = [1,2,3,4,5]
new_num = num.map(&:odd?)
#odd? は整数が奇数かどうかを真偽値で返す

p new_num
# [true, false, true, false, true]

省略形では数値を2倍する...みたいなカスタム操作は出来ないので注意。

・each

mapと似てるけど、mapは処理の結果を経て、新しい配列で返すのに対して
eachはブロック内の処理を要素の数だけ繰り返し行うだけ。

int = (1..10)

int.each do |i|
  a = i * 2
  p "2倍した数字は#{a}です"
end

使い分けのイメージとしては、
・eachは今ある配列を使って、何らかの処理を出力
・mapは今ある配列を加工して、今後の処理に使用、活用する

という感じ。

・product

配列と配列の組み合わせを出力

array = [1,2].product([3,4])
p array
#[1, 3], [1, 4], [2, 3], [2, 4]

課題でトランプゲームを作る必要があって、その際に使用。

SUITS = %w[ハート ダイヤ クラブ スペード]
VALUES = %w[A 2 3 4 5 6 7 8 9 10 J Q K]

cards = SUITS.product(VALUES).shuffle

p cards
#["クラブ", "2"], ["スペード", "A"], ["スペード", "J"], ["スペード", "Q"]...

まとめ

・こうやって羅列していくと思ったよりメソッドに触れていない
・メソッドの仕様を理解するのは前提として、それをどう活用していくか を頑張りたい

Discussion