在Haskell中,init
函数返回列表中除最后一个元素之外的所有元素
例如,init [1, 2, 3]
会返回[1, 2]
。
Elixir有类似的功能吗?
我无法在Enum
或List
模块中找到任何类似的功能。
答案 0 :(得分:8)
如果您愿意,也可以使用instance method,它会删除集合中的第一个计数项目。 如果给出负值计数,则最后的计数值将被删除。
[1,2,3] |> Enum.drop(-1) # [1,2]
答案 1 :(得分:4)
您可以使用Enum.slice/2提供带有否定结尾的decreasing range来执行此操作:
[1, 2, 3] |> Enum.slice(0..-2) # [1, 2]
答案 2 :(得分:1)
在这些情况下确认怀疑总是很好,所以这是比较两者的基准:
Settings:
duration: 1.0 s
## ListBench
[13:29:22] 1/2: Enum.drop(-1)
[13:29:26] 2/2: Enum.slice(0..-2)
Finished in 7.41 seconds
## ListBench
benchmark name iterations average time
Enum.drop(-1) 50000 72.32 µs/op
Enum.slice(0..-2) 10000 273.16 µs/op
是的,Enum.drop
是首选方案。