list - 如何将字符串列表转换为 F# 中的字符串列表

标签 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"]]

关于list - 如何将字符串列表转换为 F# 中的字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50001832/

相关文章:

enums - 如何在枚举中保留值类型

c# - 将 C# HashSet 转换为 F# 集

f# - 在 F# 中,匹配表达式 'fall through' 可以匹配另一个吗?就像在 C# 或 C++ 中一样?

python - 使用 python 正则表达式提取列表中的元素

c# 类对象 - 存储/检索多值列表的最佳方法是什么?

javascript - 将数组转换为嵌套对象列表 - Eloquent Javascript 4.3

f# - 使用 FsCheck 生成记录

python - 为什么要使列表不可散列?

c# - 为什么 .Clear() 函数会清除错误的列表?

f# - SingleOrDefault() 在 F# 中抛出 NullReferenceException