我会做类似的事情
let last n xs = xs |> List.rev |> Seq.take n |> List.ofSeq |> List.rev
Run Code Online (Sandbox Code Playgroud)
我不确定是否要将列表转换为序列并返回。F# 你就是这样做的吗?
获取最后 N 个项目相当于跳过前 (length - N) 个项目,因此对于作为输入(和输出)的序列,您可以执行以下操作:
let last n xs = Seq.skip ((Seq.length xs) - n) xs
Run Code Online (Sandbox Code Playgroud)
(或者,通过管道,let last n xs = xs |> Seq.skip (Seq.length xs - n)
对于作为输入(和输出)的列表,您可以执行以下操作:
let last n xs = List.toSeq xs |> Seq.skip (xs.Length - n) |> Seq.toList
Run Code Online (Sandbox Code Playgroud)
或者通过定义两者,只需将其传递到序列一:
let lastList n xs = List.toSeq xs |> last n |> Seq.toList
Run Code Online (Sandbox Code Playgroud)
或者,这可以通过(尾部)递归应用 Tail 来实现,如下所示:
let rec last n xs =
if List.length xs <= n then xs
else last n xs.Tail
Run Code Online (Sandbox Code Playgroud)