1. Giriş
Adətən massivlərlə nə etmək istəyirik?
Gəlin əsas əməliyyatları sadalayaq:
- Massivin elementlərini indekslə oxumaq və dəyişmək.
- Dəyərə görə element axtarmaq.
- Massivi kopyalamaq, “cut” (massivin bir hissəsi) yaratmaq.
- Massivi sortlamaq.
- Massivi tərsinə çevirmək (reverse).
- Massivi bir dəyərlə doldurmaq.
- Elementin olub-olmadığını yoxlamaq (massivdə verilən dəyər var ya yox).
- Uzunluğunu dəyişmək (resize).
Real tapşırıqlarda sən tez-tez bu əməliyyatlarla rastlaşırsan — məsələn, “cəmi 4000-dən yuxarı olan varmı?”, “ilk 1000-dən aşağı qiyməti tap”, “qiymətləri artan sırada sortla” və s.
Və bütün bunlar üçün bizdə funksiyalar var
| Əməliyyat | Metod / Sintaksis | Xüsusiyyətlər |
|---|---|---|
| İndeksə görə dəyişmək | |
Sərhəddən kənara çıxsa error |
| Dəyər axtarmaq | |
Tapılmasa -1 |
| Olub-olmadığını yoxlamaq | |
Lambda və ya funksiya |
| Sortlamaq | |
Massiv yerində dəyişir |
| Reverse | |
Elementlərin sırasını dəyişir |
| Kopyalamaq | |
Səthi kopyalamaq |
| Doldurmaq | |
Hamısını bir dəyərlə doldurur |
| Ölçünü dəyişmək | |
Yeni elementlər — default |
| Maksimum/minimum axtarmaq | |
Linq tələb edir |
2. Elementləri indekslə oxumaq və dəyişmək
Bunu artıq bilirik, amma gəlin sadə nümunədə bir daha baxaq (tutaq ki, bizdə qiymətlər massivi var):
// Tələbənin qiymətləri massivi
int[] grades = { 4, 3, 5, 2, 5 };
// İlk qiyməti oxumaq
int firstGrade = grades[0];
Console.WriteLine($"İlk qiymət: {firstGrade}");
// Son qiyməti “əla” (5) ilə dəyişmək
grades[^1] = 5;
Console.WriteLine("Dəyişilmiş son qiymət: " + grades[^1]);
Burada vacib olan: indeksləmə sıfırdan başlayır, mövcud olmayan indeksə müraciət etsən IndexOutOfRangeException error-u alırsan — müsahibələrdə və həyatda klassikdir.
3. Massivdə element axtarmaq
Bizdə iki funksiya var ki, massivdə element axtarır və taparsa onun indeksini qaytarır.
Array.IndexOf(value [, from]) funksiyası
Array.IndexOf funksiyası verilmiş elementi massivdə əvvəldən axtarır. Taparsa, indeksini qaytarır. Tapmasa — -1 qaytarır.
Bəs birdən massivdə həmin elementin növbəti yerlərini tapmaq istəyirsən? Bunun üçün Array.IndexOf funksiyasına ikinci parametr — hansı indeksdən axtarmağa başlasın — verməlisən. Bu, son tapılan elementin indeksi + 1 olmalıdır.
Gəlin massivimizdə 2 rəqəminin bütün yerlərini tapaq:
int[] grades = { 4, 3, 5, 2, 5, 2 };
int x = 2; // axtardığımız element
int index = Array.IndexOf(grades, x);
while (index != -1)
{
Console.WriteLine($"Element {x} tapıldı: {index} mövqedə");
// Növbəti indeksi axtarırıq, index + 1-dən başlayaraq
index = Array.IndexOf(grades, x, index + 1);
}
Array.LastIndexOf(value [, from]) funksiyası
Array.LastIndexOf funksiyası verilmiş elementi massivdə axırdan axtarır. Taparsa, indeksini qaytarır. Tapmasa — -1 qaytarır. Qalan hər şeydə Array.IndexOf funksiyası ilə eynidir.
Gəlin massivimizdə 2 rəqəminin bütün yerlərini tapaq, amma bu dəfə axırdan axtaraq:
int[] grades = { 4, 3, 5, 2, 5, 2 };
int x = 2; // axtardığımız element
int index = Array.LastIndexOf(grades, x);
while (index != -1)
{
Console.WriteLine($"Element {x} tapıldı: {index} mövqedə");
// Növbəti indeksi axtarırıq, əvvəlki mövqedən - 1
index = Array.LastIndexOf(grades, x, index - 1);
}
4. Massivdə elementin olub-olmadığını yoxlamaq
Elementin olub-olmadığını yoxlamaq üçün Contains funksiyası var. Bu metod true qaytarır, əgər massivdə göstərilən element varsa. Bunun işləməsi üçün System.Linq modulunu əlavə etməlisən. Nümunə:
using System.Linq; // Əgər yoxdursa, using System.Linq; əlavə et
bool hasExcellent = grades.Contains(5);
Console.WriteLine($"Beşlik var? {hasExcellent}");
Çox rahat və gözəldir.
5. Massivi tərsinə çevirmək: Array.Reverse
Tutaq ki, massivə “tərsinə baxmaq” istəyirsən. İstifadə et:
int[] grades = { 2, 3, 4, 5 };
// Massivi tərsinə çeviririk
Array.Reverse(grades);
Console.WriteLine("Tərsinə qiymətlər: " + string.Join(", ", grades));
Bu, “ən yeni” dataları tapmaq və ya sadəcə dünyaya tərsinə baxmaq üçün çox rahatdır.
6. Massivi sortlamaq: Array.Sort
Tez ya gec massivdə sortlamaq istəyəcəksən. Ən qısa və təhlükəsiz yol — standart sortlama funksiyasından istifadə etməkdir:
int[] grades = { 4, 3, 5, 2, 5 };
// Artan sırada sortlayırıq
Array.Sort(grades);
Console.WriteLine("Sortlanmış qiymətlər: " + string.Join(", ", grades));
Bu funksiya string-ləri də sortlayır, amma əlifba sırası ilə.
Azalan sırada sortlamaq
Standart Array.Sort yalnız artan sırada sortlayır. Azalan üçün sort + reverse istifadə edə bilərsən:
Array.Sort(grades); // Əvvəlcə artan sırada
Array.Reverse(grades); // Sonra tərsinə çeviririk
Console.WriteLine("Azalan: " + string.Join(", ", grades));
Qeyd: tez-tez unudurlar ki, sortlama “yerində” baş verir: massiv dəyişir, yeni massiv qaytarılmır. Əgər ilkin sıra lazımdırsa, əvvəlcə massivdən kopya çıxart.
7. Massivi klonlamaq: Clone və Array.Copy
Əgər kopya yaratmaq (və işləyərkən ilkin massivi pozmamaq) lazımdırsa, Clone() və Array.Copy() metodlarından istifadə et.
Clone() metodunu massivə çağırırsan və tam kopyasını qaytarır.
Array.Copy() metodu isə aşağıdakıları tələb edir:
- mənbə massiv;
- hansı massivə kopyalanacaq;
- neçə hüceyrə kopyalanacaq.
int[] original = { 1, 2, 3, 4, 5 };
// 1-ci yol: Clone()
// Birölçülü və çoxölçülü massivlər üçün işləyir, amma object qaytarır, type cast lazımdır:
int[] copy1 = (int[]) original.Clone();
// 2-ci yol: Array.Copy
int[] copy2 = new int[original.Length];
Array.Copy(original, copy2, original.Length);
Vacib xüsusiyyət: massivdə primitive tiplərdirsə (int, double), kopyalama dəyərlə olur. Əgər obyekt massividir, yalnız referanslar kopyalanır! (yəni “səthi kopyalama”).
8. Massivi dəyərlə doldurmaq: Array.Fill
Massivi “sıfırlamaq” və ya hamısını beşliklə doldurmaq istəyirsən? Bunun üçün rahat metod var — Array.Fill:
int[] grades = new int[5];
Array.Fill(grades, 5); // İndi bütün elementlər 5-dir
Console.WriteLine("Hipotetik ideal tələbə: " + string.Join(", ", grades));
Bəzən massivə tez bir dəyər vermək lazım olanda çox faydalıdır.
9. Maksimum və minimum dəyəri tapmaq
System.Linq modulu massivlərə bir çox faydalı metod əlavə edib, onlardan ikisi massivdə minimum və maksimum dəyəri qaytarır. Bunlar Max() və Min()-dir.
Gəlin massivdə maksimum və ya minimum qiyməti tapaq:
int maxGrade = grades.Max();
int minGrade = grades.Min();
Console.WriteLine($"Maksimum qiymət: {maxGrade}, minimum: {minGrade}");
Bu metodlar üçün using System.Linq; əlavə etməyi unutma.
GO TO FULL VERSION