f#中有没有一种方法可以对列表执行交叉操作?

时间:2020-04-19 11:30:03

标签: f#

f#中是否有一种方法可以对f#中两个列表的所有可能元素组合执行运算?

示例

precachImage()

然后乐趣加上l1 l2将执行l1 = [1;2;3] l2=[4;5;6] let plus x y = x+y

因此输出:[(1+4);(1+5);(1+6);(2+4);(2+5);(2+6);(3+4);(3+5);(3+6)]

注意:我已经尝试使用zip,但是每个元素只能使用一次。

2 个答案:

答案 0 :(得分:2)

是的,最简单的方法是使用列表理解。

let t1 = [1;2;3]
let t2 = [4;5;6]

[for a in t1 do for b in t2 do yield a+b] //val it : int list = [5; 6; 7; 6; 7; 8; 7; 8; 9]

//as a function
let f lst1 lst2 = [for a in lst1 do for b in lst2 do yield a+b]

答案 1 :(得分:1)

另一种可能性是将List.collect与List.map组合:

let l1 = [1;2;3]
let l2 = [4;5;6]

l1 |> List.collect (fun x -> List.map ((+) x) l2) //output: [5; 6; 7; 6; 7; 8; 7; 8; 9]