作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个如下所示的源列表:
let source = ["A", "B", "%", "C", "Y", "%"]
我想遍历每个元素,每次点击标记“%”时,前面列表的每个元素都应该进入一个子列表。结果应该是这样的。
let result = [["A", "B"], ["C", "Y"]]
我想我必须使用列表的折叠功能,但我的结果类型是字符串列表而不是字符串列表列表
let folder (acc, current) item =
match item with
| "" -> (current @ acc, [])
| _ -> (acc, current @ [item])
let result = source
|> List.fold folder ([], [])
|> fun (a,_) -> a
有什么想法吗?
最佳答案
您非常接近,但我认为一个问题是您的 source
列表实际上是一个包含一个大元组的列表。您必须用 ;
分隔列表项。逗号 ,
用于分隔元组中的项目。
let source = ["A"; "B"; "%"; "C"; "Y"; "%"]
然后对您的 folder
函数进行一些小改动:
let folder (acc, current) item =
match item with
| "%" -> (acc @ [current], [])
| _ -> (acc, current @ [item])
你现在得到了你想要的结果:
let result =
source
|> List.fold folder ([], [])
|> fst
> val result : string list list = [["A"; "B"]; ["C"; "Y"]]
关于list - 如何将字符串列表转换为 F# 中的字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50001832/
我是一名优秀的程序员,十分优秀!