[英]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.