Is there a transpose function in Elixir?

Hi, I am looking for a transpose function in Elixir. For example, I have such an array a, and after calling the function, the result should be b:

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

There is no one at Elixir right now, but you can create your own:

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

There (still) is not in Elixir, but you can use:

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

Here's a slightly different solution:

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

where mis your matrix.

0
source

Source: https://habr.com/ru/post/1540911/


All Articles