2017-05-27 4 views
0

J'ai un tableau int représentant des éléments de la matrice carrée. J'ai besoin de lignes, de colonnes, de 2 diagonales principales. J'ai du mal à obtenir une deuxième diagonale (pour une matrice 3 * 3, ce sont des éléments avec des index 2,4,6 pour 6 * 6 - 5,10,15,20,25,30). Je me demande s'il y a une bonne façon de le faire sans boucles.Obtention de la diagonale principale de la matrice carrée en représentation linéaire

 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. 

Répondre

1

Essayez cette

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