2017-05-27 7 views
0

私は正方行列の要素を表すint配列を持っています。私は行、列、2つの主要な対角線を取得する必要があります。私は2番目の対角線(3 * 3行列のために6 * 6 - 5,10,15,20,25,30のためのインデックス2,4,6を持つ要素です)に問題があります。私はループのないそれを行うためのきちんとした方法があるのだろうかと思っています。正方行列の主対角を線形表現にする

 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. 

答えて

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();  
をお試しください
関連する問題