2011-03-31 197 views
7

我有2个数组。 我想将第一个数组的索引转换为第二个数组。 有没有更好的办法做到这一点比我下面有什么?将一维数组索引转换为二维数组索引

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

回答

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

用于在y之前放置x。 – 2011-03-31 03:21:59

+0

@PeterOlson它为什么重要? – vexe 2014-08-31 09:45:46

+0

@vexe自从发表评论至今已有3年,所以我不记得我脑子里想的是什么。我想这与传统而不是正确有关。 – 2014-08-31 15:36:27

5

如果你的第二个数组是3x3数组,你可以用数学模型和整数除法来做到这一点。

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

卫生署,由5秒击败。 ;) – Sapph 2011-03-31 03:19:09

2

我假设你运行的代码在一个循环?如果是这样

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

叫它

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