2011-03-31 18 views
7

Tengo 2 matrices. Quiero convertir el índice de la primera matriz a la segunda. ¿Hay una mejor manera de hacerlo que lo que tengo a continuación?Convertir el índice de matriz 1D en el índice de matriz 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; 
} 

Respuesta

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

+1 para poner x antes de y. –

+0

@PeterOlson ¿Por qué es importante? – vexe

+0

@vexe Han pasado 3 años desde que hice ese comentario, así que no recuerdo exactamente lo que tenía en mente. Imagino que tenía más que ver con ser convencional que con ser correcto. –

5

Usted puede hacer esto mediante la división matemáticamente módulo y número entero, dada su segunda matriz es una matriz 3x3 la siguiente va a hacer.

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

DOH, batir por 5 segundos. ;) – Sapph

2

que asumen su funcionamiento ese código en un bucle? Si es así

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

de llamadas que

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