Elixir MapSet与Enum.member?

时间:2019-03-27 13:10:45

标签: elixir

我只需要保留唯一的值,我很困惑应该使用哪种数据结构。稍后,我将只读取整个数据结构。

  • 一种方法是使用MapSet,它将仅包含唯一元素。
  • 第二种方法是每次使用Enum.member?检查是否已经有物品-但我可以通过MapSet轻松保证。

我不确定在这种情况下哪种方法更好。哪种方法更有效,哪种方法更好?

3 个答案:

答案 0 :(得分:4)

如果将数据保存在MapSet中,那么Enum.member?实际上将在下面调用MapSet.member?,因此您将拥有MapSet的所有优点。您可以看到相关的协议实现here

答案 1 :(得分:1)

我认为您在混淆数据结构和protocols。 MapSet是实现Enumerable协议的数据结构(和模块)。您可以在MapSet上调用Enum.member/2,但这不是必需的:

mapset =
  MapSet.new()
  |> MapSet.put(1)
  |> MapSet.put(2)
  |> MapSet.put(2)
  |> MapSet.put(3)
  |> MapSet.put(3)
  |> MapSet.put(3)

Enum.join(mapset, ",")

输出:

"1,2,3"

答案 2 :(得分:0)

如果您已经具有重复的数据结构,请使用Enum.uniq/1

示例:

[1, 1, 2, 2, 2, 3, 4] |> Enum.uniq

结果:

[1, 2, 3, 4]