Elixir中是否有转置功能?

时间:2014-05-16 21:48:55

标签: elixir

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

a = [[1, 2], [3, 4], [5, 6]]
b = transpose(a)
b => [[1, 3, 5], [2, 4, 6]]

3 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:7)

Elixir中仍然没有(但仍然),但您可以使用:

def transpose(rows) do
  rows
  |> List.zip
  |> Enum.map(&Tuple.to_list/1)
end

答案 2 :(得分:0)

这是一个稍微不同的解决方案:

def transpose(m) where length(m) <2, do: m
def transpose(m) do
  for i <- 0..length(m)-1 do
    Enum.reduce(m,[], fn x,acc -> acc ++ [Enum.at(x,i)] end)
  end
end

其中m是您的矩阵。