F # Interactive:
> 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")]
Inoltre, è necessario essere in grado di utilizzare le query LINQ su sequenze, tanto per essere sicuri di avere un riferimento per l'assemblaggio System.Linq e ha aperto uno spazio dei nomi open System.Linq
UPDATE: in uno scenario complesso è possibile utilizzare le espressioni di sequenza come segue:
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
fonte
2010-09-23 10:55:28
Sto cercando un'implementazione efficiente in quanto questo elenco di prodotti/pin è piuttosto lungo. Linq sembra funzionare bene per me, ma non riesce a farlo funzionare da f #. –
Le sequenze F # implementano persino 'IEnumerable'? In caso contrario, non è possibile utilizzare LINQ. –
Sì, implementano IEnumerable. –