首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用linq将列表<t>分解为n个长度的列表<t>?

使用LINQ将列表<T>分解为n个长度的列表<T>,可以使用以下代码实现:

代码语言:csharp
复制
public static List<List<T>> SplitList<T>(List<T> list, int n)
{
    var result = new List<List<T>>();
    int count = list.Count;
    int quotient = count / n;
    int remainder = count % n;

    for (int i = 0; i < n; i++)
    {
        int itemsToTake = quotient + (i< remainder ? 1 : 0);
        result.Add(list.Take(itemsToTake).ToList());
        list = list.Skip(itemsToTake).ToList();
    }

    return result;
}

这个方法将一个列表<T>分解为n个长度相等的子列表,如果列表的元素数量不能被n整除,则将多余的元素分配到前面的子列表中。

例如,如果有一个包含10个元素的列表,将其分解为3个长度相等的子列表,将得到以下结果:

  • 第一个子列表包含4个元素
  • 第二个子列表包含4个元素
  • 第三个子列表包含2个元素

这个方法使用了LINQ的Take和Skip方法,它们是LINQ的核心方法之一,用于对序列进行筛选和投影操作。在这个方法中,我们使用了Take方法来获取子列表的前n个元素,然后使用Skip方法来跳过这些元素,以便获取下一个子列表。

这个方法的时间复杂度为O(n),其中n是列表中的元素数量。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

java1.8新特性之stream

Stream字面意思是流,在java中是指一个来自数据源的元素队列并支持聚合操作,存在于java.util包中,又或者说是能应用在一组元素上一次执行的操作序列。(stream是一个由特定类型对象组成的一个支持聚合操作的队列。)注意Java中的Stream并不会存储元素,而是按需计算。关于这个概念需要以下几点解释:1、数据源流的来源。 它可以是列表,集合,数组(java.util.Collection的子类),I/O channel, 产生器generator等(注意Map是不支持的);2、聚合操作。类似于SQL语句一样的操作, 如filter, map, reduce, find, match, sorted等。因此stream流和以前的Collection操作是完全不同, Stream操作还有两个非常基础的特征:Pipelining和内部迭代。

00
领券