1
0

【Ruby】productメソッドとmapメソッドの組み合わせ

Posted at

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メソッドの組み合わせに関する記事でした。
お役に立てれば幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0