結論
- 内包表記を使う
Elixir
sample.exs
iex(2)> for x <- [1,2], y <- [3,4], z <-[5,6], do: [x, y, z]
[
[1, 3, 5],
[1, 3, 6],
[1, 4, 5],
[1, 4, 6],
[2, 3, 5],
[2, 3, 6],
[2, 4, 5],
[2, 4, 6]
]
Ruby
sample.rb
[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]]
- サンプルはこちらを転載させていただきました
記事を書いたきっかけ
- ひょんなことから知ることになったElixirをいろいろあって勉強しています
- 近所の図書館に プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問 という本がありましてこれを借りてきました
- Elixir で書いていってみることにします
- Q02でRubyで言うところの Array#product 的なことをしたくなりました
- はじめは以下のような感じのものを自作しました
- もっと便利なものがきっとあるだろうとふて寝をしたあと、 プログラミングElixir で勉強した内包表記のことが思い浮かびました
- さっそく Elixir School に通学して確認させていただきました
- ありがとうございます
sample.exs
iex(8)> f = fn enum1, enum2 ->
...(8)> enum1
...(8)> |> Enum.reduce([], fn x, acc ->
...(8)> acc ++ Enum.map(enum2, fn y -> [x, y] end)
...(8)> end)
...(8)> end
iex(9)> f.([1,2], [3,4]) |> f.([5,6]) |> Enum.map(&List.flatten/1)
[
[1, 3, 5],
[1, 3, 6],
[1, 4, 5],
[1, 4, 6],
[2, 3, 5],
[2, 3, 6],
[2, 4, 5],
[2, 4, 6]
]
- 問題集に提示されている回答までの目標時間は大幅に過ぎていますが気にしないことにします
- 自分との闘い
- 日本語の記事が見当たらないとおもって書いたのですがすでに先輩がいらっしゃいました!