gpt4 book ai didi

list - 重复删除元组列表,但将冲突保留为列表

转载 作者:行者123 更新时间:2023-12-02 14:56:54 29 4
gpt4 key购买 nike

我是 F# 和函数式语言的新手。我很难想出一种递归方法来通过以下方式对元组列表进行重复数据删除:

 [("Apple", "500");
("Orange", "123");
("Pineapple", "300");
("Apple", "200");
("Apple", "100");
("Orange", "234");
("Cucumber", "900");]

--becomes-->

[("Apple", ["500", "200", "100"]);
("Orange", ["123", "234"]);
("Pineapple", ["300"]);
("Cucumber", ["900"]);]

基本上我想要类似于列表映射的东西。感谢解释,因为我仍然很难阅读功能代码。

最佳答案

可以使用 Seq.groupBy 执行分组.

运行 Seq.groupBy fst input 产生:

seq
[("Apple", seq [("Apple", "500"); ("Apple", "200"); ("Apple", "100")]);
("Orange", seq [("Orange", "123"); ("Orange", "234")]);
("Pineapple", seq [("Pineapple", "300")]);
("Cucumber", seq [("Cucumber", "900")])]

这很接近,但不是您想要的,因为生成的元组的第二个项目包含完整的输入对象,而您的示例表明您想要从列表中提取第二个项目。您可以使用 snd 从元组中获取第二项。 , 因为你有一个元组序列,你想从中提取第二个元素,你可以使用 Seq.map :

let grouped = Seq.groupBy fst input
|> Seq.map (fun (a, b) -> (a, Seq.map snd b))

printfn "%A" grouped

// yields...
seq
[("Apple", seq ["500"; "200"; "100"]); ("Orange", seq ["123"; "234"]);
("Pineapple", seq ["300"]); ("Cucumber", seq ["900"])]

关于list - 重复删除元组列表,但将冲突保留为列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52484713/

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