Nol*_*rin 26
试试这个功能.它使用递归,但无论如何都会优化迭代,因为它是尾递归.无论如何,它很可能比倒转整个列表(使用List.rev)更快.
let rec last = function
| hd :: [] -> hd
| hd :: tl -> last tl
| _ -> failwith "Empty list."
Run Code Online (Sandbox Code Playgroud)
然而,Pavel Minaev的答案绝对值得考虑.尽管如此,您所请求的算法在某些极少数情况下可能很有用,并且是执行该任务的最有效方法.
Pav*_*aev 23
一般来说,如果你需要这样做,你就会做错事.由于F#列表是单链接的,因此访问最后一个元素的代价很高 - O(N)其中N的大小为list.尝试重写算法,以便始终访问第一个元素,而不是最后一个元素(即O(1)).如果你不能这样做,那么首先你选择list数据结构的可能性是不错的.
Joh*_*lds 11
快速而肮脏的方法是使用List.reduce.假设列表被调用ls,
let lastElement ls = List.reduce (fun _ i -> i) ls
Run Code Online (Sandbox Code Playgroud)
至于效率,我同意帕维尔的观点.
基于Mitch答案的更简洁的版本:
let lastItem = myList |> List.rev |> List.head
Run Code Online (Sandbox Code Playgroud)
该myList列表发送到List.rev功能。然后处理结果List.head
| 归档时间: |
|
| 查看次数: |
10472 次 |
| 最近记录: |