首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FSharp复合列表

FSharp复合列表
EN

Stack Overflow用户
提问于 2014-11-03 20:15:26
回答 2查看 69关注 0票数 2

在F#中创建这个“复合”列表的最干净和最简单的方法是什么?

输入:

代码语言:javascript
运行
复制
[ 1; 2; 3; 4; 5 ]

期望产出:

代码语言:javascript
运行
复制
[ [1]; [1;2]; [1;2;3]; [1,2,3,4]; [1;2;3;4;5] ]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-03 20:35:51

有很多种方法,但我认为这是一个干净的方法:

代码语言:javascript
运行
复制
[1;2;3;4;5]  
    |> List.scan (fun x y -> x @ [y]) [] 
    |> List.tail

使用List.scan并最终使用List.tail省略第一个元素,即空列表。

票数 4
EN

Stack Overflow用户

发布于 2014-11-03 20:45:30

另一种方法是严格地将内容解释为ints并使用列表理解:

代码语言:javascript
运行
复制
[1; 2; 3; 4; 5] |> List.map(fun n -> [ for i = 1 to n do yield i ])

得到与上面相同的输出,但是如果您的输入是:

代码语言:javascript
运行
复制
[2; 1; 2] |> List.map(fun n -> [ for i = 1 to n do yield i ])

你得到:

代码语言:javascript
运行
复制
[[1; 2]; [1]; [1; 2]]

这可能是你想要的,也可能不是你想要的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26722393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档