Enum.reduce/3
будет достаточно.
input = [%{x: 3, y: 8}, %{x: 1, y: 4}]
Enum.reduce(input, %{x1: nil, x2: nil, y1: nil, y2: nil}, fn
%{x: x, y: y}, %{x1: x1, x2: x2, y1: y1, y2: y2} ->
%{
x1: if(x < x1, do: x, else: x1),
x2: if(is_nil(x2) or x > x2, do: x, else: x2),
y1: if(y < y1, do: y, else: y1),
y2: if(is_nil(y2) or y > y2, do: y, else: y2),
}
end)
Число в Erlang (и, следовательно, Elixir ) равно меньше , чем у любого другого типа, поэтому nils для x1
и y1
просто в порядке.Для x2
и y2
требуется дополнительное условие.