F # interactiva:
> 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")]
Además, debe ser capaz de utilizar las consultas LINQ en las secuencias, sólo asegúrese de que tiene una referencia al ensamblado System.Linq y abrió un espacio de nombres open System.Linq
ACTUALIZACIÓN: en un escenario complejo que puede utilizar expresiones de secuencia de la siguiente manera:
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
Estoy buscando una implementación eficiente ya que esta lista de Productos/Pin es bastante larga. Linq parece funcionar bien para mí, pero no puede hacer que funcione desde f #. –
¿Las secuencias de F # incluso implementan 'IEnumerable'? Si no lo hacen, no puedes usar LINQ. –
Sí, implementan IEnumerable. –