5
我有一個IEnumerable集合,它是分層的,其中一個元素包含多個集合。因此,如果我做了一個計數,我可能得到7-8作爲返回int,當真的可能有500個項目(因爲它們是嵌套的)。我該如何展平一個對象集合(又包含集合)?
我該如何將這個集合拼合成一個包含所有元素並且沒有嵌套的集合?
感謝
我有一個IEnumerable集合,它是分層的,其中一個元素包含多個集合。因此,如果我做了一個計數,我可能得到7-8作爲返回int,當真的可能有500個項目(因爲它們是嵌套的)。我該如何展平一個對象集合(又包含集合)?
我該如何將這個集合拼合成一個包含所有元素並且沒有嵌套的集合?
感謝
假設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);
}
如果列表包含循環,則可以使用以下解決方案:http://stackoverflow.com/questions/141467/recursive-list-flattening/24747394#answer-24747394 – Aidin 2014-07-14 23:05:13