2017-05-27 132 views
0

我有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. 

回答

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();