使用LINQ将列表转换为列表的列表我有一个值列表:IListvalues={V1,V2,V3,V4,V5,V6,V7};我想将列表转换为列表列表,其中每个子列表都是指定的大小。每个子列表的大小可能不同。例如:IListvalues_size2={{V1,V2},{V3,V4},{V5,V6},{V7}};IListvalues_size3={{V1,V2,V3},{V4,V5,V6},{V7}};IListvalues_size4={{V1,V2,V3,V4},{V5,V6,V7}};我可以使用嵌套循环很容易地做到这一点,但想知道是否有一种聪明的方法可以使用LINQ来做到这一点?我最初的想法是以某种方式使用聚合方法,但没有立即想到。谢谢。这是一个基于IEnumerable的通用Batch函数。您可以将IEnumerable>的返回类型更改为IEnumerable>而不进行其他更改(因为它已经是我实现中的列表。要更改整个内容以返回列表列表,需要在结果上调用“ToList”,或者做一个更复杂的重构。请注意,这不是在技术上使用LINQ,它只是创建了一种使用LINQ常用的相同样式和模式的新方法。publicstaticIEnumerable>Batch(thisIEnumerablesource,intbatchSize){//TODO验证参数Listbuffer=newList();foreach(源中的T项){buffer.Add(item);if(buffer.Count>=batchSize){yieldreturnbuffer;缓冲区=新列表();}}if(buffer.Count>=0){yieldreturnbuffer;您可以使用MoreLINQ批处理扩展(可从Nuget获得):IList>values_size2=values。批次(2);IList>values_size3=values.Batch(3);IList>values_size4=values.Batch(4);您还可以在此处查看源代码。鉴于其他人的回答,我使用纯LINQ提出了自己的解决方案,如下所示:=(state.Count>0)?state[state.Count-1]:null;if((batch==null)||(batch.Count==batchSize)){batch=newList(batchSize);状态。添加(批处理);}batch.Add(下一个);返回状态;});这可能不如使用IEnumerable高效,但在我的例子中,我处理的是小集合,所以应该没问题。我将选择Servy的答案作为“正确”答案,因为它不依赖于外部库并引导我找到我的解决方案。谢谢大家的帮助:)以上是C#学习教程:使用LINQ将列表转换为列表的列表。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注——publicstaticIEnumerable>Chunks(thisIEnumerablesource,intchunkSize){while(source.Any()){yield返回source.Take(chunkSize);source=source.Skip(块大小);}}本文收集自网络,不代表立场。侵权请点击右侧联系管理员删除。如需转载请注明出处: