根据属性将列表拆分为多个列表

本文关键字:列表 拆分 属性 | 更新日期: 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方法调用。