複数の配列(リスト)の要素同士を組み合わせて配列の配列を作るには (product)

[1, 2, 3]["a", "b"] から [[1, "a"], [1, "b"], [2, "a"], [2, "b"], [3, "a"], [3, "b"]] を作る方法。

Scala

val lst1 = List(1, 2, 3);
val lst2 = List("a", "b");

println(lst1.flatMap(e1 => lst2.map(e2 => (e1, e2))));
// => List((1,"a"), (1,"b"), (2,"a"), (2,"b"), (3,"a"), (3,"b"))

PHP

array_product という関数があり、これでできるかと思いきや、これは数字を要素とする配列から、その数字をすべて掛けあわせた数を計算する関数だった。簡単にできる方法はないのかな?

array_product 関数 | PHP Manual
http://php.net/manual/ja/function.array-product.php

Python

リストの内包表記を使う例

lst1 = [1, 2, 3]
lst2 = ["a", "b"]
print [[x, y] for x in lst1 for y in lst2]
# => [[1, "a"], [1, "b"], [2, "a"], [2, "b"], [3, "a"], [3, "b"]]

Ruby / JRuby

Array#product を使う。

p [1, 2, 3].product(["a", "b"])
# => [[1, "a"], [1, "b"], [2, "a"], [2, "b"], [3, "a"], [3, "b"]]

Array#product | Ruby 2.1 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.1.0/method/Array/i/product.html

このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。