猿问

使用LINQ将列表拆分为子列表

使用LINQ将列表拆分为子列表

有什么方法可以把List<SomeObject>分成几个单独的列表SomeObject,使用项索引作为每个分隔符的分隔符?

让我举例说明:

我有一个List<SomeObject>我需要一个List<List<SomeObject>>List<SomeObject>[],这样,这些结果列表中的每一个都将包含原始列表中的3项(按顺序排列)。

例如:

  • 原始清单:[a, g, e, w, p, s, q, f, x, y, i, m, c]

  • 由此产生的清单:[a, g, e], [w, p, s], [q, f, x], [y, i, m], [c]

我还需要结果列表大小作为此函数的参数。


POPMUISE
浏览 721回答 3
3回答

牧羊人nacy

试试下面的代码。public&nbsp;static&nbsp;IList<IList<T>>&nbsp;Split<T>(IList<T>&nbsp;source){ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;source&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Select((x,&nbsp;i)&nbsp;=>&nbsp;new&nbsp;{&nbsp;Index&nbsp;=&nbsp;i,&nbsp;Value&nbsp;=&nbsp;x&nbsp;}) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.GroupBy(x&nbsp;=>&nbsp;x.Index&nbsp;/&nbsp;3) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Select(x&nbsp;=>&nbsp;x.Select(v&nbsp;=>&nbsp;v.Value).ToList()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.ToList();}其思想是首先按索引对元素进行分组。除以三,其效果是将它们分成三组。然后将每个组转换为一个列表,然后将IEnumerable的List转到List的Lists

慕无忌1623718

这个问题有点老了,但我只是写了这个,我认为它比其他建议的解决方案更优雅:///&nbsp;<summary>///&nbsp;Break&nbsp;a&nbsp;list&nbsp;of&nbsp;items&nbsp;into&nbsp;chunks&nbsp;of&nbsp;a&nbsp;specific&nbsp;size ///&nbsp;</summary>public&nbsp;static&nbsp;IEnumerable<IEnumerable<T>>&nbsp;Chunk<T>(this&nbsp;IEnumerable<T>&nbsp;source,&nbsp;int&nbsp;chunksize){ &nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(source.Any()) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;yield&nbsp;return&nbsp;source.Take(chunksize); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;source&nbsp;=&nbsp;source.Skip(chunksize); &nbsp;&nbsp;&nbsp;&nbsp;}}
随时随地看视频慕课网APP
我要回答