Map Sorter v0.1.13 MapSorter View Source
Sorts a list of maps as per a list of sort specs
(ascending/descending keys).
Also works for keywords or structures implementing the Access behaviour.
Link to this section Summary
Functions
Allows to change the log level at compile time
Sorts the maps as per the sort specs (compile time or runtime)
Link to this section Functions
Allows to change the log level at compile time.
Sorts the maps as per the sort specs (compile time or runtime).
sort specs can be implicit, explicit or mixed:
- [:dob, :name] - implicit ≡ [asc: :dob, asc: :name]
- [:dob, desc: :name] - mixed ≡ [asc: :dob, desc: :name]
- [asc: :dob, desc: :name] - explicit
Examples
iex> require MapSorter
iex> people = [
...> %{name: "Mike", likes: "movies" , dob: ~D[1992-04-15]},
...> %{name: "Mary", likes: "travels", dob: ~D[1992-04-15]},
...> %{name: "Ann" , likes: "reading", dob: ~D[1992-04-15]},
...> %{name: "Ray" , likes: "cycling", dob: ~D[1977-08-28]},
...> %{name: "Bill", likes: "karate" , dob: ~D[1977-08-28]},
...> %{name: "Joe" , likes: "boxing" , dob: ~D[1977-08-28]},
...> %{name: "Jill", likes: "cooking", dob: ~D[1976-09-28]}
...> ]
iex> fun = & &1
iex> MapSorter.log_level(:info) # :debug → debug messages
iex> sorted = %{
...> explicit: MapSorter.sort(people, asc: :dob, desc: :likes),
...> mixed: MapSorter.sort(people, [:dob, desc: :likes]),
...> runtime: MapSorter.sort(people, fun.([:dob, desc: :likes]))
...> }
iex> MapSorter.log_level(:info) # :info → no debug messages
iex> sorted.explicit == sorted.mixed and
...> sorted.explicit == sorted.runtime and
...> sorted.explicit
[
%{name: "Jill", likes: "cooking", dob: ~D[1976-09-28]},
%{name: "Bill", likes: "karate" , dob: ~D[1977-08-28]},
%{name: "Ray" , likes: "cycling", dob: ~D[1977-08-28]},
%{name: "Joe" , likes: "boxing" , dob: ~D[1977-08-28]},
%{name: "Mary", likes: "travels", dob: ~D[1992-04-15]},
%{name: "Ann" , likes: "reading", dob: ~D[1992-04-15]},
%{name: "Mike", likes: "movies" , dob: ~D[1992-04-15]}
]