Elixir 长生不老药有转置功能吗?

Elixir 长生不老药有转置功能吗?,elixir,Elixir,嗨,我在Elixir中寻找转置函数。 例如,我有一个数组a,调用一个函数后,结果应该是b: a = [[1, 2], [3, 4], [5, 6]] b = transpose(a) b => [[1, 3, 5], [2, 4, 6]] 目前Elixir中没有,但您可以使用以下工具创建自己的: def transpose([]), do: [] def transpose([[]|_]), do: [] def transpose(a) do [Enum.map(a, &h

嗨,我在Elixir中寻找转置函数。 例如,我有一个数组
a
,调用一个函数后,结果应该是
b

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

目前Elixir中没有,但您可以使用以下工具创建自己的:

def transpose([]), do: []
def transpose([[]|_]), do: []
def transpose(a) do
  [Enum.map(a, &hd/1) | transpose(Enum.map(a, &tl/1))]
end
Elixir中(仍然)没有,但您可以使用:

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

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

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

def transpose(m)where length(m)我在
transpose=fn(m)->List.zip(m)|>Enum.map(&Tuple.to_List(&1))end中发现了另一个很好的实现
实际上在捕获中不需要显式的参数
Enum.map(&Tuple.to_List/1)
效果很好。@IvanKozik OTP 19.1 Elixir 1.4.2空列表没有问题