2010-04-28 12 views
7

Sprawdziłem inny wpis na obracających się tablicach 2D, ale nie jest to dokładnie to, czego chcę. chcę coś takiegoC#, obracanie tablic 2D

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

chcę obrócić go tak, rotatedArray = {{1,5,9,13}, {2,6,10,14}}; Chcę przeprowadzić analizę według kolumny, w przeciwieństwie do wierszy.

To działa, ale czy istnieje łatwiejszy sposób?

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; 
    } 

Czy istnieje łatwy sposób do iteracji po kolumnach w C#?
B

+0

byłoby znacznie prostsze, jeśli chcesz użyć innego sposobu tablic: int [ ] [] zamiast int [,] – Tigraine

Odpowiedz

5

Jeśli zmienisz tablicę na tablicę tablic, będzie to łatwiejsze. Znalazłem to, czy go zmienić na int [] []:

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

i obracania metody:

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

Dzięki Tigraine, będę musiał nieco zmodyfikować moją funkcję wywołującą, ale to jest w porządku – user327764

+0

Nie jestem z tego całkowicie zadowolony. Ale z [,] moduł wyliczający przechodzi przez wszystkie elementy obu wymiarów, a to czyni je nieco trudniejszym .. – Tigraine

+0

Działa to również z tablicą [] [], po prostu musiałem zmodyfikować moje wywołanie, by użyć [] [ ], ale [,] jest znacznie łatwiejszy w użyciu. Po prostu trochę googlowałem i najwyraźniej (ku mojemu zdziwieniu) [] [] jest szybsze niż [,] – user327764