F# 设置为列表 set.fold
F# set to list with set.fold
我正在用 F# 编程,我正在尝试使用 Set.fold.
将一个集合放入一个列表中
到目前为止我做了什么:
let list sa = Set.fold (fun se sa -> sa) [];;
但它似乎并没有将集合放入列表中,而是创建了一个
一组列表到一个列表中。
我可以对我的代码进行哪些更改,以便它不会将一组列表变成列表,而是将集合变成列表。
let toList s = Set.fold (fun l se -> se::l) [] s
fold
的第一个参数是采用两个参数的函数:类型的累加器应从 fold
(在您的情况下为 list
)returned,以及集合 fold
的单个元素适用于(在您的情况下是 Set
的元素)。此函数应 return 与作为第一个参数传递的累加器的类型相同(在您的情况下为 list
)。所以函数应该将集合的当前元素添加到列表累加器。
fold
的第二个参数是初始累加器状态(在您的情况下为空 list
)。
fold
的第 3 个参数在您的例子中是您要转换为 list
的集合
使用 Set.fold 您将收到相反顺序的物品:
let list sa = sa |> Set.fold (fun se sacc -> sacc::se) [] |> List.rev
或者,使用Set.fold返回:
let list2 sa = Set.foldBack (fun se sacc -> se::sacc) sa []
示例:
let list sa = sa |> Set.fold (fun se sacc -> sacc::se) [] |> List.rev
let list2 sa = Set.foldBack (fun se sacc -> se::sacc) sa []
let set = [1 ; 12; 6 ;8 ; 4] |> Set.ofList
set |> printfn "%A"
list set |> printfn "%A"
list2 set |> printfn "%A"
打印:
set [1; 4; 6; 8; 12]
[1; 4; 6; 8; 12]
[1; 4; 6; 8; 12]
Link:
https://dotnetfiddle.net/xwLMIp
P.S。有一个标准函数Set.toList
我正在用 F# 编程,我正在尝试使用 Set.fold.
将一个集合放入一个列表中到目前为止我做了什么:
let list sa = Set.fold (fun se sa -> sa) [];;
但它似乎并没有将集合放入列表中,而是创建了一个 一组列表到一个列表中。
我可以对我的代码进行哪些更改,以便它不会将一组列表变成列表,而是将集合变成列表。
let toList s = Set.fold (fun l se -> se::l) [] s
fold
的第一个参数是采用两个参数的函数:类型的累加器应从 fold
(在您的情况下为 list
)returned,以及集合 fold
的单个元素适用于(在您的情况下是 Set
的元素)。此函数应 return 与作为第一个参数传递的累加器的类型相同(在您的情况下为 list
)。所以函数应该将集合的当前元素添加到列表累加器。
fold
的第二个参数是初始累加器状态(在您的情况下为空 list
)。
fold
的第 3 个参数在您的例子中是您要转换为 list
使用 Set.fold 您将收到相反顺序的物品:
let list sa = sa |> Set.fold (fun se sacc -> sacc::se) [] |> List.rev
或者,使用Set.fold返回:
let list2 sa = Set.foldBack (fun se sacc -> se::sacc) sa []
示例:
let list sa = sa |> Set.fold (fun se sacc -> sacc::se) [] |> List.rev
let list2 sa = Set.foldBack (fun se sacc -> se::sacc) sa []
let set = [1 ; 12; 6 ;8 ; 4] |> Set.ofList
set |> printfn "%A"
list set |> printfn "%A"
list2 set |> printfn "%A"
打印:
set [1; 4; 6; 8; 12]
[1; 4; 6; 8; 12]
[1; 4; 6; 8; 12]
Link:
https://dotnetfiddle.net/xwLMIp
P.S。有一个标准函数Set.toList