2011-03-31 20 views
7

2つの配列があります。 最初の配列のインデックスを2番目の配列に変換します。 私は以下のものよりも良い方法がありますか?1D配列インデックスを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; 
} 

答えて

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

+1をxの前に置きます。 –

+0

@PeterOlsonなぜそれは重要ですか? – vexe

+0

@vexe私がそのコメントをしてから3年が経ちました。私は心に留めていたことを覚えていません。私はそれが正しかったよりも従来のことともっと関係があると思います。 –

5

2番目の配列が3x3配列の場合、次のようにモジュラスと整数除算を使用して数学的に行うことができます。

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

DOH、それを呼び出します。 ;) – Sapph

2

私はあなたがループ内でそのコードを実行していると仮定?

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

その場合は、5秒で倒す

foreach (var element in DoStuff(9, 3)) 
    { 
     Console.WriteLine(element.X); 
     Console.WriteLine(element.Y); 
    } 
関連する問題