# Sort a list of maps by key value

Suppose you have a list of maps that you need to sort by a specific key in each of the maps, you can do so using elixirâ€™s Enum module, `Enum.sort_by/3`

.

This function requires an enum and callback function and optionally accepts a third sorter argument, like `:asc`

and `:desc`

. The sorter will use :asc by default.

The callback function passed to the argument needs to return the value that is being sorted on and `sort_by`

will do the rest.

To sort by one key in ascending order:

```
l = [%{payment: 34, tip: 5}, %{payment: 21, tip: 6}, %{payment: 10, tip: 5}]
Enum.sort_by(l, fn(li) -> li.payment end)
=> [%{payment: 10, tip: 5}, %{payment: 21, tip: 6}, %{payment: 34, tip: 5}]
```

To sort by one key in descending order:

```
l = [%{payment: 34, tip: 5}, %{payment: 34, tip: 4}, %{payment: 21, tip: 7}, %{payment: 21, tip: 6}, %{payment: 10, tip: 5}]
Enum.sort_by(l, fn(li) -> li.payment end, :desc)
=> [%{payment: 34, tip: 5}, %{payment: 21, tip: 6}, %{payment: 10, tip: 5}]
```

To sort by multiple keys, return a tuple from the callback function:

```
l = [
%{payment: 34, tip: 5},
%{payment: 34, tip: 4},
%{payment: 21, tip: 7},
%{payment: 21, tip: 6},
%{payment: 10, tip: 5}
]
Enum.sort_by(l, fn(li) -> {li.payment, li.tip } end)
=> [
%{payment: 10, tip: 5},
%{payment: 21, tip: 6},
%{payment: 21, tip: 7},
%{payment: 34, tip: 4},
%{payment: 34, tip: 5}
]
```

If you enjoyed this elixir post you might also enjoy Reading pdf text using Elixir