C# में दो-आयामी सरणी (2D array) पर पुनरावृति (iterate) करने के लिए नेस्टेड for लूप्स का उपयोग किया जाता है। GetUpperBound() या GetLength() मेथड्स से आयामों की सीमाएं प्राप्त की जा सकती हैं।
उदाहरण
using System;
public class Demo
{
public static void Main()
{
// 3x3 दो-आयामी सरणी घोषित करें
string[,] array = new string[3, 3];
// तत्व सेट करें
array[0, 0] = "One"; array[0, 1] = "Two"; array[0, 2] = "Three";
array[1, 0] = "Four"; array[1, 1] = "Five"; array[1, 2] = "Six";
array[2, 0] = "Seven"; array[2, 1] = "Eight"; array[2, 2] = "Nine";
// आयाम सीमाएं प्राप्त करें
int rows = array.GetUpperBound(0) + 1; // या array.GetLength(0)
int cols = array.GetUpperBound(1) + 1; // या array.GetLength(1)
Console.WriteLine($"सरणी आयाम: {rows} पंक्तियाँ × {cols} स्तंभ");
Console.WriteLine();
// नेस्टेड लूप से पुनरावृति
Console.WriteLine("पंक्ति-मुख्य क्रम (Row-major order):");
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
Console.WriteLine($" array[{i},{j}] = {array[i, j]}");
}
}
}
}
आउटपुट
सरणी आयाम: 3 पंक्तियाँ × 3 स्तंभ पंक्ति-मुख्य क्रम (Row-major order): array[0,0] = One array[0,1] = Two array[0,2] = Three array[1,0] = Four array[1,1] = Five array[1,2] = Six array[2,0] = Seven array[2,1] = Eight array[2,2] = Nine
विभिन्न पुनरावृति पैटर्न
using System;
public class Demo
{
public static void Main()
{
int[,] matrix =
{
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
int rows = matrix.GetLength(0);
int cols = matrix.GetLength(1);
// 1. पंक्ति-मुख्य (Row-major) - कैश-फ्रेंडली
Console.WriteLine("पंक्ति-मुख्य:");
for (int r = 0; r < rows; r++)
{
for (int c = 0; c < cols; c++)
Console.Write($"{matrix[r,c]} ");
Console.WriteLine();
}
// 2. स्तंभ-मुख्य (Column-major)
Console.WriteLine("\nस्तंभ-मुख्य:");
for (int c = 0; c < cols; c++)
{
for (int r = 0; r < rows; r++)
Console.Write($"{matrix[r,c]} ");
Console.WriteLine();
}
// 3. foreach (सभी तत्व, लेकिन इंडेक्स नहीं)
Console.WriteLine("\nforeach (केवल मान):");
foreach (int val in matrix)
Console.Write($"{val} ");
Console.WriteLine();
// 4. विकर्ण तत्व (Diagonal)
Console.WriteLine("\nमुख्य विकर्ण:");
for (int i = 0; i < Math.Min(rows, cols); i++)
Console.Write($"{matrix[i,i]} ");
Console.WriteLine();
// 5. सभी इंडेक्स और मान (C# 7.0+ टपल के साथ)
Console.WriteLine("\nसभी इंडेक्स और मान:");
for (int r = 0; r < rows; r++)
{
for (int c = 0; c < cols; c++)
{
Console.WriteLine($" [{r},{c}] = {matrix[r,c]}");
}
}
}
}
आउटपुट
पंक्ति-मुख्य: 1 2 3 4 5 6 7 8 9 स्तंभ-मुख्य: 1 4 7 2 5 8 3 6 9 foreach (केवल मान): 1 2 3 4 5 6 7 8 9 मुख्य विकर्ण: 1 5 9 सभी इंडेक्स और मान: [0,0] = 1 [0,1] = 2 [0,2] = 3 [1,0] = 4 1,1] = 5 [1,2] = 6 [2,0] = 7 [2,1] = 8 [2,2] = 9
GetUpperBound() बनाम GetLength()
| मेथड | लौटाता है | उपयोग |
|---|---|---|
GetLength(dimension) | आयाम का आकार (लंबाई) | for (i = 0; i < GetLength(0); i++) |
GetUpperBound(dimension) | अंतिम वैध इंडेक्स | for (i = 0; i <= GetUpperBound(0); i++) |
GetLength() अधिक सहज है और आमतौर पर पसंद किया जाता है।
जैग्ड सरणी (Jagged Array) पर पुनरावृति
// जैग्ड सरणी (सरणियों की सरणी)
int[][] jagged = new int[3][];
jagged[0] = new int[] { 1, 2 };
jagged[1] = new int[] { 3, 4, 5, 6 };
jagged[2] = new int[] { 7 };
foreach (var row in jagged)
{
foreach (var val in row)
Console.Write($"{val} ");
Console.WriteLine();
}
// आउटपुट:
// 1 2
// 3 4 5 6
// 7
महत्वपूर्ण बिंदु
- दो-आयामी सरणी
[,]सिंटैक्स का उपयोग करती है (आयताकार) GetLength(0)= पंक्तियाँ,GetLength(1)= स्तंभ- पंक्ति-मुख्य क्रम (बाहरी लूप पंक्ति) कैश परफॉर्मेंस के लिए बेहतर
foreachसभी तत्वों पर पुनरावृति करता है लेकिन इंडेक्स नहीं देता- जैग्ड सरणी
[][]में प्रत्येक पंक्ति की अलग लंबाई हो सकती है - बहु-आयामी सरणी के लिए
Rankप्रॉपर्टी आयामों की संख्या देती है