Given:
cars =
%{
"Ferrari" => [
%{color: "Blue", make: "Ferrari", mileage: 120012.481},
%{color: "Red", make: "Ferrari", mileage: 29831.021},
%{color: "Black", make: "Ferrari", mileage: 24030.674},
%{color: "Cobalt", make: "Ferrari", mileage: 412.811}
],
"Koenigsegg" => [
%{color: "Blue", make: "Koenigsegg", mileage: 250.762},
%{color: "Cobalt", make: "Koenigsegg", mileage: 1297.76},
%{color: "Titanium", make: "Koenigsegg", mileage: 5360.336}
],
"Maserati" => [%{color: "Blue", make: "Maserati", mileage: 255.78}],
"Mclaren" => [%{color: "Red", make: "Mclaren", mileage: 15641.469}]
}
Using Enum.flat_map_reduce
the desired output is:
[
%{make: "Ferrari", color: "Blue", mileage: 120012.481},
%{make: "Ferrari", color: "Red", mileage: 29831.021},
%{make: "Ferrari", color: "Black", mileage: 24030.674},
%{make: "Ferrari", color: "Cobalt", mileage: 412.811},
%{make: "Koenigsegg", color: "Blue", mileage: 250.762},
%{make: "Koenigsegg", color: "Cobalt", mileage: 1297.76},
%{make: "Koenigsegg", color: "Titanium", mileage: 5360.336}
]
Attempt:
iex(1)> Enum.flat_map_reduce(cars, %{}, fn {k, [list]}, acc ->
...(1)> if List.length([list] > 2) do
...(1)> Map.put(acc, {k, [list]})
...(1)> end
...(1)> end)
Error:
** (FunctionClauseError) no function clause matching in :erl_eval."-inside-an-interpreted-fun-"/2
The following arguments were given to :erl_eval."-inside-an-interpreted-fun-"/2:
# 1
{"Ferrari",
[
%{color: "Blue", make: "Ferrari", mileage: 120012.481},
%{color: "Red", make: "Ferrari", mileage: 29831.021},
%{color: "Black", make: "Ferrari", mileage: 24030.674},
%{color: "Cobalt", make: "Ferrari", mileage: 412.811}
]}
# 2
%{}
(stdlib 3.12.1) :erl_eval."-inside-an-interpreted-fun-"/2
(stdlib 3.12.1) erl_eval.erl:829: :erl_eval.eval_fun/6
(elixir 1.10.3) lib/enum.ex:1094: anonymous fn/3 in Enum.flat_map_reduce/3
(elixir 1.10.3) lib/enum.ex:3686: Enumerable.List.reduce/3
(elixir 1.10.3) lib/enum.ex:1093: Enum.flat_map_reduce/3
How shouldEnum.flat_map_reduce
be implemented to obtain the desired list of maps? Thanks for all your help!