Elixir中是否有转置功能?

Fur*_*uri 9 elixir

嗨,我在Elixir中寻找转置功能.例如,我有这种数组a,在调用函数后,结果应为b:

a = [[1, 2], [3, 4], [5, 6]]
b = transpose(a)
b => [[1, 3, 5], [2, 4, 6]]
Run Code Online (Sandbox Code Playgroud)

Iva*_*zik 11

在Elixir中有(仍然)不是一个,但你可以使用:

def transpose(rows) do
  rows
  |> List.zip
  |> Enum.map(&Tuple.to_list/1)
end
Run Code Online (Sandbox Code Playgroud)


Osk*_*kar 11

从 Elixir v1.12 开始,您可以使用以下命令转置二维列表:

Enum.zip_with(list, &Function.identity/1)
Run Code Online (Sandbox Code Playgroud)


bit*_*ker 10

Elixir目前没有一个,但您可以创建自己的:

def transpose([]), do: []
def transpose([[]|_]), do: []
def transpose(a) do
  [Enum.map(a, &hd/1) | transpose(Enum.map(a, &tl/1))]
end
Run Code Online (Sandbox Code Playgroud)

  • 我在[本维基]中找到的另一个不错的实现(https://rosettacode.org/wiki/Matrix_transposition#Elixir)`transpose = fn(m) - > List.zip(m)|> Enum.map(&Tuple. to_list(&1))end` (9认同)