在LINQ中展平列表

Céd*_*vin 288 c# linq list

我有一个LINQ查询返回IEnumerable<List<int>>但我只想返回List<int>所以我想将我的所有记录合并到我IEnumerable<List<int>>只有一个数组.

示例:

IEnumerable<List<int>> iList = from number in
    (from no in Method() select no) select number;
Run Code Online (Sandbox Code Playgroud)

我想把我的所有结果IEnumerable<List<int>>都只拿到一个List<int>

因此,从源数组:[1,2,3,4]和[5,6,7]

我只想要一个阵列[1,2,3,4,5,6,7]

谢谢

Mik*_*Two 527

尝试 SelectMany()

var result = iList.SelectMany( i => i );
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,我总是忘记这一个 - 我知道它就在那里,但我只是花了太多时间每次我需要使用它时谷歌搜索它.将此答案添加为书签.:-) (6认同)
  • 是否有一些替代语法`SelectMany(i => i)`?我已经看到这种语法使用了很多,但它似乎是对select功能的退化使用,所以我希望语言设计者能够提出一种专门用于列表列表的快捷语法 (5认同)
  • @安迪啊啊!要是语言设计者能够给我们一些方法来“扩展”“IEnumerable”就好了! (3认同)

rec*_*ive 81

使用查询语法:

var values =
from inner in outer
from value in inner
select value;
Run Code Online (Sandbox Code Playgroud)

  • 我个人总是发现查询语法版本比方法调用版本更不直观。当Resharper提供将循环转换为LINQ表达式时,如果它为我提供了查询语法,我将始终撤消。 (3认同)

Dyl*_*tie 22

iList.SelectMany(x => x).ToArray()
Run Code Online (Sandbox Code Playgroud)

  • @recursive,如果我们在挑剔,OP说他需要返回`List <int>`,那么`.ToList()`就是正确的选择. (7认同)
  • @recursive其他人都错过了什么?`.ToArray()`? - 那是一种间接的 - 如果你只需要迭代一次 - 或者如果项目可能会改变,那么`.ToArray()`肯定不是你想要的.但是对于你要多次枚举的静态项,`.ToList()`或`.ToArray()`会提高性能(以稍高的内存使用量为代价,这通常是一个相当不错的交易). (6认同)
  • 据推测,在这种情况下的情况需要数组,因为这是在问题中指定的. (2认同)

mqp*_*mqp 11

像这样?

var iList = Method().SelectMany(n => n);
Run Code Online (Sandbox Code Playgroud)


Dan*_*iel 10

如果你有一个List<List<int>> k你可以做到的

List<int> flatList= k.SelectMany( v => v).ToList();
Run Code Online (Sandbox Code Playgroud)