【问题标题】:How can I flatten a collection of objects (which in turn contain collections)?如何展平对象集合(又包含集合)?
【发布时间】:2011-07-23 07:52:16
【问题描述】:

我有一个 IEnumerable 集合,它是分层的,其中一个元素包含多个元素。因此,如果我进行计数,我可能会得到 7-8 作为返回 int,而实际上可能有 500 个项目(因为它们是嵌套的)。

如何将此集合展平为包含所有元素且没有嵌套的集合?

谢谢

【问题讨论】:

标签: c# linq


【解决方案1】:

假设 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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2013-11-29
    • 2014-03-20
    • 1970-01-01
    相关资源
    最近更新 更多