CodeGym /Kurslar /C# SELF /Birölçülü massivlər üzərində əsas əməliyyatlar

Birölçülü massivlər üzərində əsas əməliyyatlar

C# SELF
Səviyyə, Dərs
Mövcuddur

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
arr[n] = x
Sərhəddən kənara çıxsa error
Dəyər axtarmaq
Array.IndexOf(arr, v)
Tapılmasa -1
Olub-olmadığını yoxlamaq
Array.Exists(arr, pred)
Lambda və ya funksiya
Sortlamaq
Array.Sort(arr)
Massiv yerində dəyişir
Reverse
Array.Reverse(arr)
Elementlərin sırasını dəyişir
Kopyalamaq
arr.Clone(), Array.Copy
Səthi kopyalamaq
Doldurmaq
Array.Fill(arr, val)
Hamısını bir dəyərlə doldurur
Ölçünü dəyişmək
Array.Resize(ref arr, len)
Yeni elementlər — default
Maksimum/minimum axtarmaq
arr.Max(), arr.Min()
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]);
Massivin elementlərini indekslə oxumaq və dəyişmək

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.IndexOf ilə elementin bütün yerlərini tapmaq

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);
}
Array.LastIndexOf ilə elementin bütün yerlərini axırdan tapmaq

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}");
Contains ilə massivdə dəyərin olub-olmadığını yoxlamaq

Ç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));
Array.Reverse ilə massivi tərsinə çevirmək

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));
Array.Sort ilə artan sırada sortlamaq

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));
Azalan sortlama: Sort + Reverse

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);
Massivi klonlamaq: Clone() və Array.Copy()

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));
Array.Fill ilə massivi dəyərlə doldurmaq

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}");
Massivdə maksimum və minimum dəyəri tapmaq

Bu metodlar üçün using System.Linq; əlavə etməyi unutma.

2
Tapşırıq
C# SELF, səviyyə, dərs
Bağlanıb
Massivin çeşidlənməsi və maksimum elementin tapılması
Massivin çeşidlənməsi və maksimum elementin tapılması
2
Tapşırıq
C# SELF, səviyyə, dərs
Bağlanıb
Massivdə elementin bütün daxilolmalarını tapmaq
Massivdə elementin bütün daxilolmalarını tapmaq
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION