Из псевдо C #, у меня есть это:
class C
{
List<A> a;
List<B> b;
}
List<C> L;
Я хотел бы получить два списка: ListA и ListB, где ListA - это объединение всех полей 'a' из списка L и аналогично для ListB.
это было бы что-то вроде:
var ListA = new List<A>();
var ListB = new List<B>();
foreach (var l in L)
{
ListA.Append(l.a);
ListB.Append(l.b);
}
В F #,
Я предполагаю, что это будет что-то вроде: let ListA = L |> List.Concat
(но как мне сказать, чтобы выбрать поле a
?)
или это можно сделать как let ListA = L |> List.Fold (fun acc value -> acc.Concat value)
(как мне указать здесь пустой список?)
или это можно сделать так?
let getElementsA (l : C list) =
seq {
for element in l do
for a in element.a do
yield a
}
но разве это не слишком многословно?