繁体   English   中英

将元素添加到列表末尾的最简单方法是什么?

[英]What is the easiest way to add an element to the end of the list?

As :: : 'a -> 'a list -> 'a list用于将元素添加到列表的开头,谁能告诉我是否有 function 可以将元素添加到列表的末尾 如果没有,我猜List.rev (element::(List.rev list))是最直接的方法吗?

谢谢!

没有标准的 function 执行此操作的原因是在列表末尾附加是反模式(又名“snoc 列表”或Schlemiel the Painter 算法)。 在列表末尾添加元素需要列表的完整副本 在列表的前面添加一个元素需要分配一个单元格——新列表的尾部可以只指向旧列表。

也就是说,最直接的方法是

let append_item lst a = lst @ [a]

list@[element]应该可以工作。 @加入列表。

鉴于此操作是线性的,您不应该在代码的“热”部分使用它,因为这对性能很重要。 在一个冷的部分,使用list @ [element]正如Adi建议的那样。 在一个热门的部分,重写你的算法,这样你就不需要这样做了。

典型的做法是在处理过程中以相反的顺序累加结果,然后在返回结果之前反转整个累加列表。 如果您有 N 个处理步骤(每个处理步骤都向列表中添加一个元素),那么您将在 N 个元素上摊销反向的线性成本,因此您保留线性算法而不是二次算法。

在某些情况下,另一种有效的技术是以相反的顺序处理您的元素,这样累积的结果就会以正确的顺序出现,而无需显式的反转步骤。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM