Я написал код, но выглядит ужасно.
Изображение есть две последовательности, такие как:
let x = [(1,"x");(2,"y")]
let y = [(1, "xx", "xxx");(2,"yy","yyy")]
Элементы являются кортежами, но не одинаковой формы.
Результат должен быть [(1, "x", "xx", "xxx");(2, "y", "yy", "yyy")]
.
Первый элемент в кортеже - это ключ.
Код, который я написал, использовал карту как:
let x = [(1,"x");(2,"y")]
let y = [(1, "xx", "xxx");(2,"yy","yyy")]
let mapY = y |> Seq.map (fun (a,b,c) -> (a, (b, c))) |> Map.ofSeq
let r = [
for (k,v) in x do
let (v1,v2) = mapY |> Map.tryFind k |> Option.orElse (Some ("","")) |> Option.get
yield (k, v, v1, v2)
]
printfn "%A" r
не так грациозно.
Поэтому мне интересно какое-нибудь лучшее решение? (Элемент кортежа в вопросе может иметь тип seq, например, кортеж).
Ключевой вопрос заключается в том, как изящно объединить две последовательности по ключу.