您好我在Elixir中寻找转置功能。
例如,我有这种数组a
,在调用函数后,结果应为b
:
a = [[1, 2], [3, 4], [5, 6]]
b = transpose(a)
b => [[1, 3, 5], [2, 4, 6]]
答案 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
是您的矩阵。