gpt4 book ai didi

f# - F# 中是否有库函数组合来自不同列表的元素

转载 作者:行者123 更新时间:2023-12-04 22:19:21 24 4
gpt4 key购买 nike

我想要一个函数 f ,它接受一个列表列表并返回通过从每个列表中获取一个元素而制成的所有可能组合的元组列表。

例如

f [["A";"B";"C"];[1;2]]

会给出结果:
[("A",1);("A",2);("B",1);("B",2);("C",1);("C",2)]

和:
f [[onions;peas];[mash;fries];[chicken;steak]]

会给:
[(onions,mash,chicken);(onions,mash,steak);(onions;fries;chicken) ... (peas,fries,steak)]

我正在考虑推出自己的,但觉得必须有一个库函数比我的拇指拳法更好优化,但我似乎无法通过谷歌搜索找到任何东西(我可能不知道正确的组合术语,所以继续打不同的组合方法和功能)

最佳答案

像 CaringDev 一样,我认为没有任何标准库函数可以做到这一点。我认为原因之一是它们会有不同的类型。

OP 中的 [["A";"B";"C"];[1;2]] 等代码甚至无法编译,因为使用字符串值向编译器表明这是一个嵌套的字符串列表,但 [1;2] 是一个整数列表。

它可以用元组来完成,但这是一对的组合函数与三元组的组合函数不同的地方,依此类推。

也就是说,这些功能实现起来很简单:

let combine2 xs ys = [
for x in xs do
for y in ys do
yield x, y ]

let combine3 xs ys zs = [
for x in xs do
for y in ys do
for z in zs do
yield x, y, z ]

例子:
> combine2 ["A";"B";"C"] [1;2];;
val it : (string * int) list =
[("A", 1); ("A", 2); ("B", 1); ("B", 2); ("C", 1); ("C", 2)]
> combine3 ["onions"; "peas"] ["mash"; "fries"] ["chicken"; "steak"];;
val it : (string * string * string) list =
[("onions", "mash", "chicken"); ("onions", "mash", "steak");
("onions", "fries", "chicken"); ("onions", "fries", "steak");
("peas", "mash", "chicken"); ("peas", "mash", "steak");
("peas", "fries", "chicken"); ("peas", "fries", "steak")]

关于f# - F# 中是否有库函数组合来自不同列表的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39962717/

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