Skip to content

Extension of Enum functions like min_by, max_by, min_max_by, returning a list of results instead of just one.

License

Notifications You must be signed in to change notification settings

seantanly/elixir-minmaxlist

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

50 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Minmaxlist

Build Status Hex.pm Version

Elixir library extending Enum.min_by/2, Enum.max_by/2 and Enum.min_max_by/2 to return a list of results instead of just one.

This enables searching for all matching results based multiple min/max value criteria. See Examples.

Documentation

API documentation is available at http://hexdocs.pm/minmaxlist

Adding Minmaxlist To Your Project

To use Minmaxlist with your projects, edit your mix.exs file and add it as a dependency:

defp deps do
  [
    {:minmaxlist, "~> x.x.x"},
  ]
end

Examples

Minmaxlist is designed to assist in filtering result sets by min/max value while returning list of results that matches the requirement. This is especially useful for example,

Find the youngest people with highest income.

import Minmaxlist
[
  %{name: "A", age: 24, income: 4000},
  %{name: "B", age: 22, income: 3300},
  %{name: "C", age: 22, income: 2800},
  %{name: "D", age: 25, income: 5000},
  %{name: "E", age: 22, income: 3300},
  %{name: "F", age: 25, income: 5500},
  %{name: "G", age: 24, income: 4500},
] |> min_list_by(&(&1.age)) |> max_list_by(&(&1.income))
# => [%{name: "B", age: 22, income: 3300}, %{name: "E", age: 22, income: 3300}]

Find the youngest and oldest people,

import Minmaxlist
[
  %{name: "A", age: 24, income: 4000},
  %{name: "B", age: 22, income: 3300},
  %{name: "C", age: 22, income: 2800},
  %{name: "D", age: 25, income: 5000},
  %{name: "E", age: 22, income: 3300},
  %{name: "F", age: 25, income: 5500},
  %{name: "G", age: 24, income: 4500},
] |> min_max_list_by(&(&1.age))
# => {
#   [%{name: "B", age: 22, income: 3300}, %{name: "C", age: 22, income: 2800}, %{name: "E", age: 22, income: 3300}],
#   [%{name: "D", age: 25, income: 5000}, %{name: "F", age: 25, income: 5500}]
# }

LICENSE

This software is licensed under MIT License.

About

Extension of Enum functions like min_by, max_by, min_max_by, returning a list of results instead of just one.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages