F # Interactive Sitzung:
> let seq1 = seq [("city1", "pin1"); ("city2", "pin2")];;
val seq1 : seq<string * string> = [("city1", "pin1"); ("city2", "pin2")]
> let seq2 = seq [("pin1", "product1"); ("pin2", "product2")];;
val seq2 : seq<string * string> = [("pin1", "product1"); ("pin2", "product2")]
> Seq.zip seq1 seq2;;
val it : seq<(string * string) * (string * string)> =
seq
[(("city1", "pin1"), ("pin1", "product1"));
(("city2", "pin2"), ("pin2", "product2"))]
> Seq.zip seq1 seq2 |> Seq.map (fun (x,y) -> (fst x, snd y));;
val it : seq<string * string> =
seq [("city1", "product1"); ("city2", "product2")]
Außerdem müssen Sie in der Lage sein, Linq Abfragen auf Sequenzen zu verwenden, nur sicher sein, Sie einen Verweis auf die System.Linq Baugruppe haben und öffnete einen Namespace open System.Linq
UPDATE: in einem komplexen Szenario Sie Sequenz Ausdrücke verwenden können wie folgt:
open System
let seq1 = seq [("city1", "pin1"); ("city2", "pin2"); ("city1", "pin3"); ("city1", "pin4")]
let seq2 = seq [("pin1", "product1"); ("pin2", "product2"); ("pin1", "product3"); ("pin2", "product1")]
let joinSeq = seq { for x in seq1 do
for y in seq2 do
let city, pin = x
let pin1, product = y
if pin = pin1 then
yield(city, product) }
for(x,y)in joinSeq do
printfn "%s: %s" x y
Console.ReadKey() |> ignore
Ich bin auf der Suche nach einer effizienten Implementierung, da diese Liste von Produkten/Pin ziemlich lang ist. Linq scheint für mich gut zu funktionieren, kann aber nicht von f # zur Arbeit kommen. –
Haben F # -Sequenzen sogar "IEnumerable" implementiert? Wenn nicht, können Sie LINQ nicht verwenden. –
Ja, sie implementieren IEnumerable. –