2010-04-28 22 views
7

He mirado otras publicaciones sobre matrices en 2D en rotación, pero no es exactamente lo que quiero. Quiero algo como estoC#, matrices 2D giratorias

int[,] original= new int[4,2] 
     { 
      {1,2}, 
      {5,6}, 
      {9,10}, 
      {13,14} 
     }; 

quiero convertirlo así, rotatedArray = {{1,5,9,13}, {2,6,10,14}}; Quiero hacer algunos análisis por columna, en lugar de por filas.

Esto funciona, pero ¿hay una manera más fácil?

private static int[,] RotateArray(int[,] myArray) 
    { 
     int org_rows = myArray.GetLength(0); 
     int org_cols = myArray.GetLength(1); 

     int[,] myRotate = new int[org_cols, org_rows]; 

     for (int i = 0; i < org_rows; i++) 
     { 
      for(int j = 0; j < org_cols; j++) 
      { 
       myRotate[j, i] = myArray[i, j]; 
      } 
     } 

     return myRotate; 
    } 

¿Hay una manera fácil de recorrer columnas en C#?
B

+0

Sería mucho más simple si desea utilizar otra forma de matrices: int [ ] [] en lugar de int [,] – Tigraine

Respuesta

5

Si cambia su matriz para que sea una matriz de matrices, se vuelve más fácil. He encontrado esto si lo cambia a un int [] []:

int[][] original = new[] 
            { 
             new int[] {1, 2}, 
             new int[] {5, 6}, 
             new int[] {9, 10}, 
             new int[] {13, 14} 
            }; 

y el método de rotación:

private static int[][] Rotate(int[][] input) 
{ 
    int length = input[0].Length; 
    int[][] retVal = new int[length][]; 
    for(int x = 0; x < length; x++) 
    { 
     retVal[x] = input.Select(p => p[x]).ToArray(); 
    } 
    return retVal; 
} 
+0

Gracias Tigraine, tendré que modificar un poco mi función de llamada, pero está bien – user327764

+0

No estoy muy contento con eso. Pero con [,] el enumerador revisa todos los elementos de ambas dimensiones, y eso hace que sea un poco más difícil. – Tigraine

+0

Esto también funciona con la matriz [] [], solo tuve que modificar mi llamada un poco para usar [] [ ], pero el [,] es mucho más fácil de usar. Acabo de buscar un poco en esto y aparentemente, (para mi sorpresa) [] [] es más rápido que [,] – user327764