list - 如何将字符串列表转换为 F# 中的字符串列表
问题描述
我有一个看起来像这样的源列表:
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"]]
推荐阅读
- elasticsearch - 跨索引的弹性搜索聚合不起作用
- python - Auth.Token 必须是“用户”实例 Django
- php - 如何在php中分离和修改字符串的内容?
- arrays - 基于键列链接谷歌工作表标签
- excel - 使用 powershell 剪贴板从浏览器中的 excel 复制行
- php - 手动更改状态时不调用订单完成挂钩
- unity3d - 团结 | 具有更好性能的动画
- python - 在 python 上查找奇偶校验异常值,CodeWars 问题
- .net-core - 单元文本模拟 dbContext
- android - 为什么我的 Android BroadcastReceiver 消息没有到达?