Создание структуры из списка - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть следующий список структур в моем модуле:

defmodule Team do
  defstruct name: nil, points: nil
end

team1 = %Team{name: "Team 1", points: "00"}
team2 = %Team{name: "Team 2", points: "50"}
team3 = %Team{name: "Team 3", points: "25"}
team4 = %Team{name: "Team 4", points: "12"}
team5 = %Team{name: "Team 5", points: "04"}
team6 = %Team{name: "Team 6", points: "32"}

teams = [team1, team2, team3, team4, team5, team6]

У меня также есть следующая структура:

defmodule Match do
  defstruct team1: nil, team2: nil
end

Как собрать список матчей, основанный на командах в этом списке?

Например, Match: team1, team2

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

@ Хаулет опубликовал правильный ответ с рекурсией, но я бы использовал Enum.chunk_every/2 для простоты:

for [a, b] <- Enum.chunk_every(teams, 2), do: %Match{team1: a, team2: b}
0 голосов
/ 30 апреля 2018

Да, вы можете сделать это довольно легко:

def build(list), do: do_build(list, [])

defp do_build([], result), do: result
defp do_build([a, b | rest], result), do: do_build(rest, [%Match{team1: a, team2: b} | result])
defp do_build(_, _), do: raise "Odd number of elements in list"
...