Packages
map_sorter
0.2.18
0.2.70
0.2.69
0.2.68
0.2.67
0.2.66
0.2.65
0.2.64
0.2.63
0.2.62
0.2.61
0.2.60
0.2.59
0.2.58
0.2.57
0.2.56
0.2.55
0.2.54
0.2.53
0.2.52
0.2.51
0.2.50
0.2.49
0.2.48
0.2.47
0.2.46
0.2.45
0.2.44
0.2.42
0.2.41
0.2.40
0.2.39
0.2.38
0.2.37
0.2.36
0.2.35
0.2.34
0.2.33
0.2.32
0.2.31
0.2.30
0.2.29
0.2.28
0.2.27
0.2.26
0.2.25
0.2.24
0.2.23
0.2.22
0.2.21
0.2.20
0.2.19
0.2.18
0.2.17
0.2.16
0.2.15
0.2.14
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.22
0.1.21
0.1.20
0.1.19
0.1.18
0.1.17
0.1.16
0.1.15
0.1.14
0.1.13
0.1.12
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Sorts a list of maps per a list of sort specs.
Current section
Files
Jump to
Current section
Files
map_sorter
README.md
README.md
# Map Sorter
[](https://travis-ci.org/RaymondLoranger/map_sorter)
Sorts a list of `maps` as per a list of `sort specs`
(ascending/descending keys).
Also supports:
- keywords
- structs implementing the Access behaviour
- nested maps, keywords or structs implementing the Access behaviour
## Installation
Add the `:map_sorter` dependency to your `mix.exs` file:
```elixir
def deps() do
[
{:map_sorter, "~> 0.2"}
]
end
```
## Usage
```elixir
require MapSorter
MapSorter.sort(maps, sort_specs)
```
Examples of `sort specs` for flat data structures:
```
- implicit: [:dob, :name]
- mixed: [:dob, desc: :name]
- explicit: [asc: :dob, desc: :name]
```
Examples of `sort specs` for nested data structures:
```
- implicit: [[:birth, :date], :name]
- mixed: [[:birth, :date], desc: :name]
- explicit: [asc: [:birth, :date], desc: :name]
```
## Note
To allow sorting on structs like `%DateTime{}` or `%Time{}`,
you should add the following to your `config/config.exs` file:
```elixir
config :map_sorter, sorting_on_structs?: true
```
And then you should recompile the `:map_sorter` dependency:
```
mix deps.compile map_sorter
```
## Example 1
```elixir
require MapSorter
people = [
%{name: "Mike", likes: "ski, arts", dob: "1992-04-15"},
%{name: "Mary", likes: "travels" , dob: "1992-04-15"},
%{name: "Bill", likes: "karate" , dob: "1977-08-28"},
%{name: "Joe" , likes: "boxing" , dob: "1977-08-28"},
%{name: "Jill", likes: "cooking" , dob: "1976-09-28"}
]
MapSorter.sort(people, asc: :dob, desc: :likes)
```
The above code will sort `people` ascendingly by `:dob` and
descendingly by `:likes` as follows:
```elixir
[
%{name: "Jill", likes: "cooking" , dob: "1976-09-28"},
%{name: "Bill", likes: "karate" , dob: "1977-08-28"},
%{name: "Joe" , likes: "boxing" , dob: "1977-08-28"},
%{name: "Mary", likes: "travels" , dob: "1992-04-15"},
%{name: "Mike", likes: "ski, arts", dob: "1992-04-15"}
]
```
## Example 2
```elixir
require MapSorter
people = [
%{name: [first: "Meg", last: "Hill"], birth: [date: ~D[1977-01-23]]},
%{name: [first: "Meg", last: "Howe"], birth: [date: ~D[1966-01-23]]},
%{name: [first: "Joe", last: "Holt"], birth: [date: ~D[1988-01-23]]},
%{name: [first: "Meg", last: "Hunt"], birth: [date: ~D[1955-01-23]]}
]
MapSorter.sort(people, asc: [:name, :first], desc: [:birth, :date])
```
The above code will sort `people` ascendingly by `first name` and
descendingly by `birth date` as follows (see note above):
```elixir
[
%{name: [first: "Joe", last: "Holt"], birth: [date: ~D[1988-01-23]]},
%{name: [first: "Meg", last: "Hill"], birth: [date: ~D[1977-01-23]]},
%{name: [first: "Meg", last: "Howe"], birth: [date: ~D[1966-01-23]]},
%{name: [first: "Meg", last: "Hunt"], birth: [date: ~D[1955-01-23]]}
]
```