如果您有List
类型的嵌套T
:
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
子句按我的意图返回类型List<List<T>>
而不是List<T>
。
所以这个问题有两条路径(答案就足够了):
如果所有其他方法都失败了,我也可以创建一个类来表示这个嵌套列表,但是我想阻止它,因为它会是一个单例。
答案 0 :(得分:1)
如果您确定每列有5行,则可以选择该索引。
var fifthRow = foo.Select(x => x[4]).ToList();
或者更安全的选择是
var fifthRow = foo.Select(x => x.Skip(4).FirstOrDefault()).ToList();
由于任何没有至少5行的列都会生成T
的默认值。
请注意,这是一个包含该行值的新列表,因此无法用于更新foo
中的值。