首页 > 解决方案 > 如何使用 linq 从列表中创建子列表?

问题描述

这是另一种方法将列表拆分为 N 大小的较小列表

这篇文章的目的是在不直接使用“for”关系和“范围”的情况下分享涉及“Linq”的知识和意见。

示例:我有一个包含 100 个项目的列表,我需要将其分成 10 个列表。

我使用以下脚本,有人有更好的方法或更高效的方法吗?

var subLists = myList.Select((x, i) => new { Index = i, Item = x })
                     .GroupBy(x => x.Index / "MAXIMUM ITEMS ON SUBLIST")
                     .Select(x => x.Select(v => X.Item).ToList());

标签: c#listlinq

解决方案


这是一个缓慢的操作

(x, i) => new { Index = i, Item = x }

这是一个适用于任何列表的扩展方法

public static IEnumerable<List<T>> splitList<T>(List<T> items, int size)  
{        
    for (int i=0; i < items.Count; i+= size) 
    { 
        yield return items.GetRange(i, Math.Min(size, items.Count - i)); 
    }  
}

或更好的性能

public static List<List<T>> splitList<T>(this List<T> items, int size)
{
    List<List<T>> list = new List<List<T>>();
    for (int i = 0; i < items.Count; i += size)
        list.Add(items.GetRange(i, Math.Min(size, items.Count - i)));
    return list;
}

推荐阅读