【问题标题】:getting main diagonal of square matrix in linear representation以线性表示形式获取方阵的主对角线
【发布时间】:2017-10-28 03:13:03
【问题描述】:

我有表示方阵元素的 int 数组。我需要得到它的行、列、2个主要对角线。我无法获得第二条对角线(对于 3*3 矩阵,它是索引为 2,4,6 的元素,对于 6*6 - 5,10,15,20,25,30)。我想知道有没有一种不用for循环的巧妙方法。

        var matrix = new int[] { 6, 7, 2, 1, 5, 9, 8, 3, 4 };

        int size = 3;

        int i = 0;
        var rows = matrix.GroupBy(x => i++ / size);

        i = 0;
        var columns = matrix.GroupBy(x => i++ % size);

        var diag1 = matrix.Where((x, index)=>index%(size+1)==0);

        var diag2 = matrix.Where((x, index) => index % (size - 1) == 0);//PROBLEM - takes 0,8 indexes also.

【问题讨论】:

    标签: c# enumerable


    【解决方案1】:

    试试这个

                var matrix = new int[] { 6, 7, 2, 1, 5, 9, 8, 3, 4 };
    
                int size = 3;
    
                var rows = matrix.Select((x,i) => new {x = x, i = i}).GroupBy(x => x.i / size).Select(x => x.Select(y => y.x).ToArray()).ToArray();
    
                var columns = matrix.Select((x, i) => new { x = x, i = i }).GroupBy(x => x.i % size).Select(x => x.Select(y => y.x).ToArray()).ToArray();
    
                var diag1 = matrix.Where((x, index) => (index /size) == (index % size)).Select(x => x).ToArray();
    
                var diag2 = matrix.Where((x, index) => (index / size) == (size - 1) - (index % size)).Select(x => x).ToArray();      
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      相关资源
      最近更新 更多