I have following map structure.
I would like to sort by sort_id
within the map.
[
{{"100", "100-0"},
[
%{
id: "001",
name: "Elixir",
sort_id: "1"
},
%{
id: "002",
name: "Ruby",
sort_id: "3"
},
%{
id: "003",
name: "Java",
sort_id: "2"
}]
}
]
I would like to convert like this.
[
{{"100", "100-0"},
[
%{
id: "001",
name: "Elixir",
sort_id: "1"
},
%{
id: "003",
name: "Java",
sort_id: "2"
},
%{
id: "002",
name: "Ruby",
sort_id: "3"
}]
}
]
Please give me some advice.
Considering, you have the list extracted separately:
iex(2)> a = [
...(2)> %{id: "001", name: "Elixir", sort_id: "1"},
...(2)> %{id: "002", name: "Ruby", sort_id: "3"},
...(2)> %{id: "003", name: "Java", sort_id: "2"}
...(2)> ]
[
%{id: "001", name: "Elixir", sort_id: "1"},
%{id: "002", name: "Ruby", sort_id: "3"},
%{id: "003", name: "Java", sort_id: "2"}
]
iex(3)> Enum.sort_by(a, fn x -> x.sort_id end)
[
%{id: "001", name: "Elixir", sort_id: "1"},
%{id: "003", name: "Java", sort_id: "2"},
%{id: "002", name: "Ruby", sort_id: "3"}
]
Hope this helps you!
Thanks.
I under stand the way to sort with simple structure sort. However I have no idea nested value sorted.
Thanks.
I can go with it.
[
{{'100'}, %{id: 1, name: "Elixir", sort_id: 3}},
{{'200'}, %{id: 3, name: "Java", sort_id: 1}},
{{'300'}, %{id: 2, name: "Python", sort_id: 2}}
]
|> Enum.sort_by(fn {_, y}-> y.sort_id end)
Finally it worked.
[
{{"100", "100-0"}, [
%{id: "001", name: "Elixir", sort_id: "1"},
%{id: "002", name: "Java", sort_id: "3"},
%{id: "003", name: "Ruby", sort_id: "2"}
]
},
{{"200", "100-0"}, [
%{id: "001", name: "erlang", sort_id: "1"},
%{id: "002", name: "C#", sort_id: "3"},
%{id: "003", name: "Python", sort_id: "2"}
]
}
]
|> Enum.map(fn {num, val}->
{num, Enum.sort_by(val, fn x-> x.sort_id end)}
end)
2 Likes