1. Giriş
Təsəvvür elə ki, adi massiv elə uzun pizza qutusu kimidir, bütün dilimlər sırayla düzülüb — dadlıdır, amma bir az yeknəsəkdir.
İndi isə iş cədvəlini və ya şahmat taxtasını təsəvvür elə. Orda artıq hər şey sətirlər və sütunlar şəklində təşkil olunub — yəni cədvəl formasında. Bax, bu klassik ikiölçülü massiv məsələsidir.
Real həyatda ikiölçülü massivlər hər addımda qarşımıza çıxır:
- İşçilərin maaş cədvəlləri (sətirlər — işçilər, sütunlar — aylar).
- Ekrandakı şəkil (hər bir "hüceyrə" — pikselin rəngi, iki koordinatı var: X və Y).
- Matris hesablamaları və məlumatların işlənməsi.
- Şahmat taxtası və ya "X və 0" oyun sahəsi.
Bəzən ikiölçülü massivə matris deyirlər (bu ad riyaziyyatdan gəlib).
Proqramçı kimi sənə ikiölçülü massiv lazım ola biləcək çox yer var. Demək olar ki, istənilən stolüstü oyunun reallaşdırılması — hazır ikiölçülü massivdir: “Şahmat”, “Dama”, “X və 0”, “Dəniz döyüşü”:
“Şahmat” və ya “Dəniz döyüşü” oyun sahəsi elədir ki, ikiölçülü massivlər üçün əladır, burada hüceyrələrin koordinatları kimi sadəcə ədədlərdən istifadə edəcəksən. “Piyada e2 → e4” yox, “piyada (4,1) → (4,3)”. Proqramçı kimi sənin üçün belə daha rahat olacaq.
2. İkiölçülü massivlərin elan sintaksisi
Qorxulu görünür, amma ilk elanadək! Addım-addım baxaq.
Ümumi qayda
tip[,] massivinAdi;
Burada mötərizənin içindəki vergül , səhv deyil, yəni massiv ikiölçülüdür.
Nümunələr
int[,] matris;
double[,] qiymetCədvəli;
string[,] şahmatTaxtası;
Massiv yaratmaq
Ölçüləri veririk: sətir və sütun sayı.
matris = new int[3, 4]; // 3 sətir, 4 sütun
Bu 3x4-lük cədvəldir: Excel-də 3 sətir və 4 sütunlu cədvəl kimi təsəvvür et.
Dərhal dəyişəni elan edib ikiölçülü massiv yarada bilərsən:
int[,] matris = new int[3, 4];
Dərhal dəyərlərlə də başlaya bilərsən (birölçülü massivdəki kimi):
int[,] nümunə = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// Cədvəl 3 sətir, 3 sütun
Vacibdir: Bu cür başlanğıcda BÜTÜN sətirlər eyni uzunluqda olmalıdır. Birinci sətirdə 3 element, ikinci sətirdə 2 element ola bilməz.
Vizual sxem
┌─────┬─────┬─────┬─────┐
│ 0 │ 1 │ 2 │ 3 │ ← sütunlar (Columns)
├─────┼─────┼─────┼─────┤
│ 0,0 │0,1 │0,2 │0,3 │ ← sətir 0 (Row 0)
├─────┼─────┼─────┼─────┤
│ 1,0 │1,1 │1,2 │1,3 │ ← sətir 1 (Row 1)
├─────┼─────┼─────┼─────┤
│ 2,0 │2,1 │2,2 │2,3 │ ← sətir 2 (Row 2)
└─────┴─────┴─────┴─────┘
Hər element [sətir, sütun] indeks cütü ilə verilir.
3. İndeksləmə və elementlərə çıxış
İkiölçülü massivdə elementə çıxış üçün iki indeks göstərilir:
- Birinci — sətirin nömrəsi
- İkinci — sütunun nömrəsi
matris[1, 2] = 99; // İkinci sətir (indeks 1), üçüncü sütun (indeks 2)
Şahmata öyrəşənlər üçün xatırladım: indeksləmə sıfırdan başlayır. Yəni, birinci element [0, 0]-dır.
Yazmaq və oxumaq
int[,] data = new int[5, 2];
data[1, 1] = 5; // yazmaq
int value = data[1, 1]; // oxumaq
Bax, yaddaşda belə görünəcək:
4. İkiölçülü massiv doldurmaq
Gəlin elə bir kod yazaq ki, matrisə 1-dən 12-yə qədər ardıcıl ədədlər yazılsın, necə işlədiyini başa düşəsən.
int[,] matris = new int[3, 4];
int value = 1;
for (int row = 0; row < 3; row++)
{
for (int col = 0; col < 4; col++)
{
matris[row, col] = value;
value++;
}
}
Burada xarici dövr sətirləri, daxili dövr isə sütunları keçir.
İllüstrasiya:
İcra olunduqdan sonra:
┌────┬────┬────┬────┐
│ 1 │ 2 │ 3 │ 4 │
├────┼────┼────┼────┤
│ 5 │ 6 │ 7 │ 8 │
├────┼────┼────┼────┤
│ 9 │10 │11 │12 │
└────┴────┴────┴────┘
5. Ölçülər: sətir və sütun sayını öyrənmək
Çox vaxt massiv ölçülərini "dinamik" öyrənmək lazımdır. C#-da bunun üçün rahat GetLength() metodu var.
int[,] matris = new int[3, 4];
int sətirlər = matris.GetLength(0); // sətir sayı (birinci ölçü) - 3
int sütunlar = matris.GetLength(1); // sütun sayı (ikinci ölçü) - 4
Console.WriteLine($"Sətir: {sətirlər}, Sütun: {sütunlar}");
Length ilə qarışdırma — ikiölçülü massivdə bu, bütün elementlərin ümumi sayıdır (sətir × sütun).
6. İkiölçülü massiv ekrana çıxarmaq
İkiölçülü cədvəli ekrana çıxarmaq üçün adətən iki dövr istifadə olunur — elə bil konsolda labirint çəkirsən. Nümunə:
for (int row = 0; row < matris.GetLength(0); row++)
{
for (int col = 0; col < matris.GetLength(1); col++)
{
Console.Write(matris[row, col] + "\t"); // "\t" — gözəllik üçün tabulyasiya
}
Console.WriteLine(); // yeni sətrə keçmək
}
Çıxış nümunəsi:
1 2 3 4
5 6 7 8
9 10 11 12
Bu arada, sən artıq cəmi bir neçə sətr kodla cədvəl "çəkə" bilirsən!
7. Çoxölçülü massivlər
Massivlər haqqında daha bir maraqlı fakt: ikiölçülü massiv mümkündürsə, bəs üçölçülü də olar?
Bəli, istənilən ölçüdə massiv yaratmaq olar. Belə massivlərə çoxölçülü deyirlər.
Çoxölçülü massivləri necə elan etmək olar
Sadəcə lazım olan ölçülərin sayını vergüllə ayırırsan:
int[,,,] matris = new int[2, 3, 4, 5];
Burada dördölçülü massivimiz var:
- Birinci koordinatda 2 element,
- İkinci — 3,
- Üçüncü — 4,
- Dördüncü — 5.
Yaddaşda belə massiv bir böyük “kub” kimi ardıcıl saxlanılır.
Elementlərə necə çıxmaq olar
Elementə çıxış üçün bütün indeksləri göstərirsən:
matris[0, 1, 2, 3] = 42;
int value = matris[1, 2, 0, 4];
- İndekslər həmişə C#-da sıfırdan başlayır.
- Belə massivdə cəmi 2 × 3 × 4 × 5 = 120 element olacaq.
Çoxölçülü massivlərin praktiki nümunələri
- 2D — cədvəllər, şahmat taxtaları, şəkillər.
- 3D — kompüter qrafikasında “kubiklər”, elmi hesablamalar üçün məlumatlar (məsələn, məkan və zamanda müxtəlif nöqtələrdə temperatur).
- 4D və yuxarı — nadir hallarda istifadə olunur, amma qabaqcıl riyaziyyatda, simulyasiyalarda, machine learning-də və s. rast gəlinir.
GO TO FULL VERSION