gpt4 book ai didi

f# - 在 F# 中合并两个列表

转载 作者:行者123 更新时间:2023-12-05 08:23:54 24 4
gpt4 key购买 nike

我编写了这个将两个列表合并在一起的函数,但由于我对函数式编程还很陌生,所以我想知道是否有更好(更简单)的方法来做到这一点?

let a = ["a"; "b"; "c"]
let b = ["d"; "b"; "a"]

let merge a b =
// take all a and add b
List.fold (fun acc elem ->
let alreadyContains = acc |> List.exists (fun item -> item = elem)
if alreadyContains = true then
acc
else
elem :: acc |> List.rev
) b a

let test = merge a b

预期结果是:["a"; “乙”; “C”; “d”],我正在恢复列表以保持原始顺序。我以为我可以使用 List.foldBack(并删除 List.rev)实现相同的效果,但它会导致错误:

类型不匹配。期待一个 '一个
但给出了 '一个列表
当统一 ''a' 和 ''a list' 时,结果类型将是无限的

为什么使用foldBack时会有差异?

最佳答案

你可以使用类似下面的东西

let merge a b =
a @ b
|> Seq.distinct
|> List.ofSeq

请注意,这将保留顺序并删除任何重复项。

在 F# 4.0 中,这将被简化为

let merge a b = a @ b |> List.distinct

关于f# - 在 F# 中合并两个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28677835/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com