Rubyで学ぶ配列の直積生成: 実用的な使い方から応用まで
Rubyプログラミングにおいて、配列の直積を生成することは、さまざまなシナリオで有用です。
この記事では、RubyのArray#product
メソッドを使った直積の生成方法について、基本から応用まで幅広く解説します。
直積の基本
まずは最も基本的な直積の生成方法を見ていきましょう。
以下の例では、二つの配列の直積を生成しています。
ソースコード例
1 2 3 4 5 6 7 |
class Program def main p [1, 2].product([3, 4]) end end Program.new.main |
このコードを実行すると、以下のような出力結果が得られます。
出力結果
[[1, 3], [1, 4], [2, 3], [2, 4]]
KindleUnlimited会員であれば、全ての本をご覧頂けます。 配列、イテレータ、ブロックを理解すれば、Rubyプログラミングの世界が変わる 第1版
複数配列の直積
product
メソッドは、複数の配列に対しても直積を生成することができます。
次の例では、三つの配列を用いて直積を生成しています。
ソースコード例
1 2 3 4 5 6 7 |
class Program def main p [1, 2].product([3, 4], ['a', 'b']) end end Program.new.main |
このコードを実行すると、以下のような結果が得られます。
出力結果
[[1, 3, 'a'], [1, 3, 'b'], [1, 4, 'a'], [1, 4, 'b'], [2, 3, 'a'], [2, 3, 'b'], [2, 4, 'a'], [2, 4, 'b']]
ブロックを使用した直積の処理
product
メソッドにブロックを渡すことで、直積の各要素に対して特定の処理を行うこともできます。
例えば、以下のコードでは、直積を生成した後に各要素の合計を計算しています。
ソースコード例
1 2 3 4 5 6 7 |
class Program def main [1, 2].product([3, 4]) { |a, b| p a + b } end end Program.new.main |
このコードを実行すると、直積の各ペアの合計が出力されます。
出力結果
4
5
5
6
直積を使った応用例
直積は、アルゴリズムやデータ処理において多くの応用が可能です。
例えば、異なる属性を持つデータの組み合わせを生成する場合に有効です。次の例では、色とサイズの組み合わせを生成しています。
ソースコード例
1 2 3 4 5 6 7 8 9 |
class Program def main colors = ['赤', '青', '緑'] sizes = ['S', 'M', 'L'] p colors.product(sizes) end end Program.new.main |
このコードを実行すると、色とサイズのすべての組み合わせが出力されます。
出力結果
[['赤', 'S'], ['赤', 'M'], ['赤', 'L'], ['青', 'S'], ['青', 'M'], ['青', 'L'], ['緑', 'S'], ['緑', 'M'], ['緑', 'L']]
条件を満たす組み合わせの選択
直積を生成した後、特定の条件を満たす組み合わせだけを選択することができます。次の例では、合計が特定の値になる組み合わせを抽出しています。
ソースコード例
1 2 3 4 5 6 7 8 |
class Program def main pairs = [1, 2, 3].product([4, 5, 6]) p pairs.select { |a, b| a + b == 7 } end end Program.new.main |
このコードを実行すると、合計が7になる組み合わせが出力されます。
出力結果
[[1, 6], [2, 5], [3, 4]]
直積と他のメソッドの組み合わせ
直積は他のメソッドと組み合わせることで、より複雑なデータ構造を生成することができます。
例えば、配列の直積に対してmap
メソッドを使って、新しいデータ構造を作り出すことができます。
ソースコード例
1 2 3 4 5 6 7 8 |
class Program def main pairs = [1, 2, 3].product([4, 5, 6]) p pairs.map { |a, b| {sum: a + b, product: a * b} } end end Program.new.main |
このコードでは、各組み合わせの合計と積を含むハッシュを生成しています。
出力結果
[{sum: 5, product: 4}, {sum: 6, product: 5}, {sum: 7, product: 6}, ...]
複数の配列での動的な直積生成
場合によっては、動的に配列を生成し、それらの配列で直積を作る必要があるかもしれません。
次のコードでは、複数の配列を動的に生成し、それらで直積を作成しています。
ソースコード例
1 2 3 4 5 6 7 8 |
class Program def main arrays = (1..3).map { |i| [i, i+1, i+2] } p arrays.reduce(&:product).map(&:flatten) end end Program.new.main |
このコードでは、まず1から3までの数値で3つの配列を生成し、それらの配列の直積を計算しています。
出力結果
[[1, 2, 3, 2, 3, 4, 3, 4, 5], [1, 2, 3, 2, 3, 4, 3, 4, 6], ...]
まとめ
この記事では、Rubyにおける配列の直積生成について、基本的な方法から複数の配列を用いた応用例まで幅広く解説しました。
直積はプログラミングにおいて多様なシナリオで活用できるため、この知識をうまく使って、より効果的なコードを書きましょう。
最後まで読んで頂き、ありがとうございました。少しでもお役にたてたなら幸いです!