【问题标题】:How can I reduce IEnumerable<IEnumerable<Foo>> to IEnumerable<Foo>?如何将 IEnumerable<IEnumerable<Foo>> 减少为 IEnumerable<Foo>?
【发布时间】:2009-10-21 11:44:12
【问题描述】:

对不起,奇怪的标题。我想要实现的目标很简单:

IEnumerable<IEnumerable<Foo>> listoflist;
IEnumerable<Foo> combined = listoflist.CombineStuff();

例子:

{{0, 1}, {2, 3}} => {0, 1, 2, 3}

我很肯定这有一个 Linq 表达式...

旁注:列表可能很大。

【问题讨论】:

    标签: c# linq ienumerable


    【解决方案1】:

    正如 leppie 所说,你想要Enumerable.SelectMany。最简单的形式是:

     combined = listOfList.SelectMany(x => x);
    

    在查询表达式中,当您有多个 from 子句时,会调用 SelectMany,因此另一种选择是:

     combined = from x in listOfList
                from y in x
                select y;
    

    【讨论】:

    • 我想知道为什么 MS 没有重载所有不带参数的扩展方法,而是使用标识。猜猜类型推断不会那么好用。
    • 是的,类型推断会变得很棘手——至少是预协方差。之后它会更简单。
    【解决方案2】:

    SelectMany()

    好的

    【讨论】:

      猜你喜欢
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多