使用 LINQ 在嵌套列表中查找行

Finding row in Nested List using LINQ

如果您有一个类型为 T 的嵌套 List

List<List<T>> foo = new List<List<T>>();

而你假设内部列表中的元素是列,那么最优雅的获取行的方式是什么?这就是我的意思(如果您需要更多详细信息):

添加元素(假设列表已经初始化)

for (int x = 0; x < 5; x++)
    for (int y = 5; y < 10; y++)
        foo[x][y] = y + x; // some weird value

因此,因此,获取列很简单(也是我将此方法替换为二维数组的最大原因):

// 5th column
foo[5];

但是你怎么会吵架呢?我正在尝试这样的事情(第 5 行):

// 5th row ??
foo.Where(sublist => true).Where(item => item.Y == 5);
// (Assume the objects have a Y property that reflects its coordinate)

但似乎第一个 Where 子句 returns 类型 List<List<T>> 而不是我预期的 List<T>

所以这个问题有两条路径(任何一个答案都可以):

  1. 避免循环,如何枚举列表中的所有项目?
  2. 如何使用任何其他简单方法获得一行?

如果所有其他方法都失败了,我也可以制作一个 class 来表示这个嵌套列表,但我想避免这样做,因为它是一个单例。

如果您确定每列有 5 行,您可以 select 该索引。

var fifthRow = foo.Select(x => x[4]).ToList();

或者更安全的选择是

var fifthRow = foo.Select(x => x.Skip(4).FirstOrDefault()).ToList();

因为没有至少 5 行的任何列都会生成 T 的默认值。

请注意,这将是一个包含该行值的新列表,因此不能用于更新 foo 中的值。