2011-03-26 77 views
5

我有一个IEnumerable集合,它是分层的,其中一个元素包含多个集合。因此,如果我做了一个计数,我可能得到7-8作为返回int,当真的可能有500个项目(因为它们是嵌套的)。我该如何展平一个对象集合(又包含集合)?

我该如何将这个集合拼合成一个包含所有元素并且没有嵌套的集合?

感谢

+0

如果列表包含循环,则可以使用以下解决方案:http://stackoverflow.com/questions/141467/recursive-list-flattening/24747394#answer-24747394 – Aidin 2014-07-14 23:05:13

回答

13

假设smallEnumerable是7-8项,每项其中之一有一个属性SubItems这本身就是同一类型的项目可枚举的集合,然后你压扁这样的:

var flattened = smallEnumerable.SelectMany(s => s.SubItems); 

如果SubItems的每个人都可以有自己SubItems,那么一些递归是为了:

IEnumerable<MyType> RecursiveFlatten(IEnumerable<MyType> collection) 
{ 
    return collection.SelectMany(
     s => s.SubItems.Any() ? s.Concat(RecursiveFlatten(s.SubItems)) : s); 
} 
相关问题