productメソッド
productメソッドは、配列と他の一つ以上の配列(または同じ配列)の全ての組み合わせを生成し、それらを新しい配列に格納して返します。
a = [1, 2]
b = ['a', 'b']
result = a.product(b)
p result # => [[1, "a"], [1, "b"], [2, "a"], [2, "b"]]
この例では、配列aと配列bの全ての組み合わせを生成しています。
mapメソッド
mapメソッドは、配列の全ての要素に対してブロック内のコードを実行し、その結果を新しい配列に格納して返します。
numbers = [1, 2, 3, 4]
squares = numbers.map { |number| number * number }
p squares # => [1, 4, 9, 16]
この例では、配列numbersの各要素を二乗して、結果を新しい配列squaresに格納しています。
productとmapを組み合わせる
productとmapを組み合わせると、複数の配列から全ての組み合わせを生成し、それぞれの組み合わせに対して特定の操作を行うことができます。
SUITS = ['Hearts', 'Diamonds', 'Clubs', 'Spades']
NUMBERS = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']
cards = SUITS.product(NUMBERS).map { |suit, number|"#{suit}の#{number}" }
puts cards
この例では、SUITSとNUMBERSの全ての組み合わせを生成し、それぞれのカードを文字列として新しい配列に格納しています。例えば、"Heartsの2"、"Heartsの3"といった形式です。
このように、productとmapを組み合わせることで、複雑な操作も簡潔に書くことができます。
最後に、productとmapを使わないで同じ結果を得るためには、ネストされたループを使用することができます。以下に例を示します。
cards = []
SUITS.each do |suit|
NUMBERS.each do |number|
cards << "#{suit}の#{number}"
end
end
puts cards
以上、productメソッドとmapメソッドの組み合わせに関する記事でした。
お役に立てれば幸いです。