如何使用linq选择不规则数组的列

4

如何在C#中使用linq选择一个由int组成的锯齿数组的列,我按照以下方式选择行。

int[][] values;
....
var rows = from row in values select row;

感谢您的帮助。
4个回答

2
var cols = values.SelectMany(v=>v.Select(c=>c))

我觉得这会将数组压平,有没有一种方法可以将列作为数组获取? - CoGo

1

再加一行:

int[][] values;
....
var rows = from row in values select row;
var cols = rows.SelectMany(x => x);

在我看来,这将数组展平了,有没有一种方法可以将列作为数组获取? - CoGo

1
IEnumerable<IEnumerable<int>> columns = values
  .SelectMany((row, ri) => row
    .Select((x, ci) => new {cell = x, ci, ri}))
  .GroupBy(z => z.ci)
  .Select(g => g.Select(z => z.cell));

一些注意事项:

  • 这不会保留来自不同大小数组的空白空间(记住 - 锯齿状)。
  • rowindex(ri)未使用,可以删除。
  • 如果需要,rowindex可以用于生成emptyspace的值。

-1

你也可以这样做:

        int[][] values = new int[5][];
        values[0] = new int[5] { 1, 2, 3, 4, 5 };
        values[1] = new int[5] { 1, 2, 3, 4, 5 };
        values[2] = new int[5] { 1, 2, 3, 4, 5 };
        values[3] = new int[5] { 1, 2, 3, 4, 5 };
        values[4] = new int[5] { 1, 2, 3, 4, 5 };

        var rows = from r in values where r[0] == 1 select r[0];

        //two options here for navigating each row or navigating one row

        var rows = from r in values[0] where r == 1 select r;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接