2011-03-26 106 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); 
} 
相關問題