LINQ: How to Append List of Elements Into Another List
I have the following class
public class Element
{
public List<int> Ints
{
get;private set;
}
}
Given a List<Element>
, how to find a list of all the Ints
inside the List<Element>
using LINQ?
I can use the following code
public static List<int&g开发者_Go百科t; FindInts(List<Element> elements)
{
var ints = new List<int>();
foreach(var element in elements)
{
ints.AddRange(element.Ints);
}
return ints;
}
}
But it is so ugly and long winded that I want to vomit every time I write it.
Any ideas?
return (from el in elements
from i in el.Ints
select i).ToList();
or maybe just:
return new List<int>(elements.SelectMany(el => el.Ints));
btw, you'll probably want to initialise the list:
public Element() {
Ints = new List<int>();
}
You can simply use SelectMany
to get a flatten List<int>
:
public static List<int> FindInts(List<Element> elements)
{
return elements.SelectMany(e => e.Ints).ToList();
}
... or aggregating:
List<Elements> elements = ... // Populate
List<int> intsList = elements.Aggregate(Enumerable.Empty<int>(), (ints, elem) => ints.Concat(elem.Ints)).ToList();
精彩评论