如何制作未排序的MapSet?

时间:2018-02-13 19:21:00

标签: elixir

是否可以创建未排序的MapSet?

它如何运作:

$config['base_url'] = 'http://localhost/projekt/';

预期如何:

session.set_cookie(
    u'a=b; expires=Thu, 15-Mar-2018 18:37:51 GMT; '
    'domain=.whatever.com; path=/')

1 个答案:

答案 0 :(得分:3)

MapSet根本没有排序。您可能会看到值显示为小地图排序,但这是Erlang如何处理小地图的实现细节,MapSet在内部使用地图。

如果您想要获取返回的唯一元素列表,可以改为使用Enum.reduce + MapSet,如下所示:

defmodule A do
  def sorted_uniq(list) do
    Enum.reduce(list, {[], MapSet.new}, fn x, {list, map_set} ->
      if MapSet.member?(map_set, x) do
        {list, map_set}
      else
        {[x | list], MapSet.put(map_set, x)}
      end
    end)
    |> elem(0)
    |> Enum.reverse
  end
end

IO.inspect A.sorted_uniq([2, 3, 2, 1])

输出:

[2, 3, 1]