为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

POPMUISE 2019-06-03 13:30:39
使用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]我还需要结果列表大小作为此函数的参数。
查看完整描述

3 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

试试下面的代码。

public static IList<IList<T>> Split<T>(IList<T> source){
    return  source        .Select((x, i) => new { Index = i, Value = x })
        .GroupBy(x => x.Index / 3)
        .Select(x => x.Select(v => v.Value).ToList())
        .ToList();}

其思想是首先按索引对元素进行分组。除以三,其效果是将它们分成三组。然后将每个组转换为一个列表,然后将IEnumerableList转到ListLists


查看完整回答
反对 回复 2019-06-03
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

这个问题有点老了,但我只是写了这个,我认为它比其他建议的解决方案更优雅:

/// <summary>/// Break a list of items into chunks of a specific size
/// </summary>public static IEnumerable<IEnumerable<T>> Chunk<T>(this IEnumerable<T> source, int chunksize){
    while (source.Any())
    {
        yield return source.Take(chunksize);
        source = source.Skip(chunksize);
    }}


查看完整回答
反对 回复 2019-06-03
  • 3 回答
  • 0 关注
  • 720 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信