2

インターフェイスのアイテムを含むリストがあります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;
     }
}

これを行うためのより良い方法は何ですか?

4

1 に答える 1

5

はい、LINQ を使用して 1 つのステートメントで実行できます。

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メソッド呼び出しのチェーンからメソッド呼び出しを削除できます。

于 2013-06-08T09:54:16.067 に答える