F#中的列表子列表

时间:2016-02-05 08:20:01

标签: list f# linked-list

如何获取子列表

[1]; [1; 2]; [1; 2; 3]; ...; [1; 2; 3; ...; n]

来自清单

[1; 2; 3; ...; n]

以最惯用的方式?我所能做的就是:

List.scan (fun acc elem -> elem::acc) [] [1;2;3;4;5]
> val it : int list list =
    [[]; [1]; [2; 1]; [3; 2; 1]; [4; 3; 2; 1]; [5; 4; 3; 2; 1]]

感谢。

3 个答案:

答案 0 :(得分:4)

您的实施很好。这是我的选择:

let source = [1..10]

let counts = [0..source.Length] // Or start at 1 if you don't want to start with an empty list

counts |> List.map (fun count -> source |> List.take count)

答案 1 :(得分:4)

将我扔到堆上,这可能是Foole的回答:

let inits list =
    list |> List.mapi (fun i _ -> List.take (i + 1) list)

mapi是一个有用的函数:你为它提供了一个获取每个索引和项目的函数。

答案 2 :(得分:3)

这是另一个:

let f n = List.init n (fun i -> [1..(i + 1)])

List.init用于初始化列表的任务。