2011-03-31 20 views
7

में कनवर्ट करें मेरे पास 2 सरणी हैं। मैं पहली सरणी के सूचकांक को दूसरे में परिवर्तित करना चाहता हूं। क्या मेरे पास नीचे की तुलना में ऐसा करने का एक बेहतर तरीका है?1 डी सरणी सूचकांक 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

+1 पहले x को डालने के लिए +1। –

+0

@ पीटर ओलसन यह क्यों मायने रखता है? – vexe

+0

@vexe मैंने यह टिप्पणी करने के 3 साल बाद किया है, इसलिए मुझे याद नहीं आया कि मेरे मन में क्या था। मुझे कल्पना है कि इसे सही होने से पारंपरिक होने के साथ और अधिक करना था। –

5

आप इस गणितीय का उपयोग कर मापांक और पूर्णांक विभाजन कर सकते हैं, अपने दूसरे सरणी दिया एक 3x3 सरणी निम्नलिखित करना होगा है।

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

DOH, 5 सेकंड से हराया। ;) – Sapph

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); 
    } 
संबंधित मुद्दे