Elixir:如何获得列表中的最后n项?

Far*_*eed 27 elixir

我有一个清单:

a = [1,2,4,5,6,7,8,9,9,88,88]
Run Code Online (Sandbox Code Playgroud)

在Python中,获取最后n个项目很简单:

a[-n:]
Run Code Online (Sandbox Code Playgroud)

在Elixir中相当于什么?

Dog*_*ert 46

使用Enum.take/2负值:

iex(1)> list = [1, 2, 4, 5, 6, 7, 8, 9, 9, 88, 88]
iex(2)> Enum.take(list, -4) |> IO.inspect(charlists: :as_lists)
[9, 9, 88, 88]
Run Code Online (Sandbox Code Playgroud)

拿(可数,计数)

[...] count必须是整数.如果count给出否定,则将采用最后的count值.[...]

  • 使用MapSet,[timing](https://gist.github.com/lexmag/32977ce8fd7cb44ddefa)`list = MapSet.new([1,2,4,5,6,7,8,9,9,88,88] ])|> Enum.take(-4)`.对于正常大小的列表,但是如果您有一个类似1000万个项目的列表则使用MapSet. (2认同)
  • MapSets 不是有序的,所以这不起作用。另外我很确定只是_创建_一个 MapSet 会比我的代码慢。 (2认同)
  • 天啊.那么还有另外两个选项,`Enum.slice(list,-1,length)`,我非常肯定会遍历这些选项.或者,`Enum.drop(list,length - 1)`我认为这可能会成功. (2认同)

小智 7

如果您有很长的列表,可能需要使用其他数据类型/数据结构.还有许多其他解决方案有O(log n)而不是O(n)来获取列表的第n个尾部,例如:https://github.com/baryluk/ral