2011-03-31 24 views
7

Ho 2 array. Voglio convertire l'indice del primo array al secondo. C'è un modo migliore per farlo rispetto a quello che ho qui sotto?Converti indice array 1D in indice array 2D

Array array1[9]; 
Array array2[3][3]; 

// Index is the index of the 1D array 
public Point convert1Dto2D(int index) 
{ 
     Point p = new Point(); 

     switch (index) { 
      case 0: 
       p.x = 0; 
       p.y = 0; 
       break; 
      case 1: 
       p.x = 0; 
       p.y = 1; 
       break; 
      case 2: 
       p.x = 0; 
       p.y = 2; 
       break; 
      case 3: 
       p.x = 1; 
       p.y = 0; 
       break; 
      case 4: 
       p.x = 1; 
       p.y = 1; 
       break; 
      case 5: 
       p.x = 1; 
       p.y = 2; 
       break; 
      case 6: 
       p.x = 2; 
       p.y = 0; 
       break; 
      case 7: 
       p.x = 2; 
       p.y = 1; 
       break; 
      case 8: 
       p.x = 2; 
       p.y = 2; 
       break; 
     } 

return p; 
} 

risposta

25
p.x = index/3; 
p.y = index % 3; 
+5

+1 per mettere x prima di y. –

+0

@PeterOlson Perché è importante? – vexe

+0

@vexe Sono passati 3 anni da quando ho fatto quel commento, quindi non ricordo esattamente quello che avevo in mente. Immagino che abbia più a che fare con l'essere convenzionali che con l'essere corretti. –

5

Si può fare questo modulo e divisione intera matematicamente utilizzando, dato il secondo matrice è una matrice 3x3 seguente farà.

p.y = index % 3; 
p.x = index/3; 
+0

doh, battuto per 5 secondi. ;) – Sapph

2

presumo vostra corsa che il codice in un ciclo? Se è così

IEnumerable<Point> DoStuff(int length, int step) { 
    for (int i = 0; i < length; i++) 
     yield return new Point(i/step, i%step); 
} 

Chiamatela

foreach (var element in DoStuff(9, 3)) 
    { 
     Console.WriteLine(element.X); 
     Console.WriteLine(element.Y); 
    }