c# - 如何使用 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());
解决方案
这是一个缓慢的操作
(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;
}
推荐阅读
- angular - 如何在 ngFor 中动态生成 mat-select
- raspberry-pi3 - 从 Voice Bonnet 访问 GPIO
- git - git log 文件名错误:不明确的参数文件名未知修订
- django - Docker Django uWSGI 奇怪的连接错误
- python - 它是如何在 Python 中的下一行代码的底层工作的?
- javascript - javascript点击事件的问题
- swift - 在 Swift Foundation Measurements 框架中使用年单位间隔
- android - 是否可以从 FileProvider 生成的 URI 获取文件路径?
- pyomo - 通过 DataPortal 将 JSON 数据加载到参数中
- java - 我可以使用通用方法来访问休眠中不同实体的数据吗