Ruby 3.2 アドベントカレンダーの14日目の記事です。
Enumerator
Enumerator::Product クラスと Enumerator.product メソッド追加
Array#product
は自身の配列オブジェクトと引数の配列を組み合わせた配列の配列を返す。
こんな感じ:
[1,2,3].product([4,5]) #=> [[1, 4], [1, 5], [2, 4], [2, 5], [3, 4], [3, 5]] [1,2].product([3,4],[5,6]) #=> [[1, 3, 5], # [1, 3, 6], # [1, 4, 5], # [1, 4, 6], # [2, 3, 5], # [2, 3, 6], # [2, 4, 5], # [2, 4, 6]]
Enumerator.product
は配列だけじゃなくて Enumerable オブジェクトでこれと同じような動きをする。戻り値も配列じゃなくて Enumerator
の一種の Enumerator::Product
を返す。
e = Enumerator.product(1..3, [4,5]) #=> #<Enumerator::Product: ...> e.to_a #=> [[1, 4], [1, 5], [2, 4], [2, 5], [3, 4], [3, 5]]
Enumerator.product()
は Enumerator::Product.new()
と同じ。
e = Enumerator::Product.new(1..3, [4,5]) #=> #<Enumerator::Product: ...> e.to_a #=> [[1, 4], [1, 5], [2, 4], [2, 5], [3, 4], [3, 5]]