根据属性将列表拆分为多个列表
本文关键字:列表 拆分 属性 | 更新日期: 2023-09-27 18:17:25
我有一个包含接口IGrid
(我创建它)项的列表
public interface IGrid
{
RowIndex { get; set; }
ColumnIndex { get; set; }
}
,我想创建一个方法,将List分隔为多个列表List>
基于RowIndex属性
所以我写:
public List<List<IGrid>> Separat(List<IGrid> source)
{
List<List<IGrid>> grid = new List<List<IGrid>>();
int max= source.Max(c => c.RowIndex);
int min = source.Min(c => c.RowIndex);
for (int i = min; i <= max; i++)
{
var item = source.Where(c => c.RowIndex == i).ToList();
if (item.Count > 0)
grid.Add(item);
}
return grid;
}
}
有什么更好的方法来做到这一点?
是的,您可以使用LINQ在单个语句中完成:
public List<List<IGrid>> Separat(List<IGrid> source) {
return source
.GroupBy(s => s.RowIndex)
.OrderBy(g => g.Key)
.Select(g => g.ToList())
.ToList();
}
如果你不关心列表以RowIndex
的升序出现,你的方法产生它们的方式,你可以从方法调用链中删除OrderBy
方法调用。