defmodule Gulib.List do # list_a与list_b是否有交集 def mixed?(list_a, list_b) do Enum.reduce(list_a, false, fn(i, mixed) -> mixed || Enum.member?(list_b, i) end) end def index_by(list, key) do list |> Enum.map(fn(item) -> {Map.get(item, key), item} end) |> Map.new end def compact list do list |> Enum.filter(fn(item) -> !!item end) end def find_index(list, ele) when is_list(list) do Enum.find_index(list, fn(x) -> x == ele end) || -1 end def max([]), do: nil def max(list) do Enum.max(list) end def min([]), do: nil def min(list) do Enum.min(list) end def sample([]), do: nil def sample([item]), do: item def sample(list) do list |> sample(1) |> List.first end def sample(list, count) do Enum.take_random(list, count) end def sort_by_values(records, values, field_key) do Enum.sort(records, fn(a, b) -> find_index(values, a |> Map.get(field_key)) < find_index(values, b |> Map.get(field_key)) end) end end