How to sort by id nested in map

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