如何从F#调用Enumerable.Join?

Sha*_*bie 5 c# linq f#

我有两个序列(元组),我需要在其中进行连接:

  • Seq 1:[(City1*Pin1),(City2*Pin2),(City1*Pin3),(City1*Pin4)]
  • Seq 2:[(Pin1*ProductA),(Pin2*ProductB),(Pin1*ProductC),(Pin2*ProductA)]

进入序列(元组):

  • [(City1*ProductA),(City2*ProductB),(City*ProductC),(City2*Product A)...]

在C#中,我可以使用Linq Join扩展方法执行此操作,如:

seq1.Join(seq2, t => t.Item2, t=> t.Item1,
    (t,u) => Tuple.Create(t.Item1, u.Item2))
Run Code Online (Sandbox Code Playgroud)

我如何在F#中实现这一目标?我在那里找不到Seq的加入.

Cal*_*ers 6

编辑:实际上,你可以使用LINQ:

> open System.Linq;;
> let ans = seq1.Join(seq2, (fun t -> snd t), (fun t -> fst t), (fun t u -> (fst t, snd u)));;
Run Code Online (Sandbox Code Playgroud)

为什么不使用F#的本机Seq功能?如果您查看文档,在这个问题上,您只需使用这些而不是LINQ.以Seq.map2功能为例:

> let mapped = Seq.map2 (fun a b -> (fst a, snd b)) seq1 seq2;;

val it : seq<string * string> =
  seq [("city1", "product1"); ("city2", "product2")]
Run Code Online (Sandbox Code Playgroud)

应该给你你想要什么,在哪里seq1以及seq2是你的第一个和第二个序列.