C# Eğitimleri 47 – Diziler 8 – Düzensiz (Jagged) Diziler

C# Eğitimlerinde Diziler konusunun son dersindeyiz. Bu yazımda sizlere Jagged düzensiz diziler hakkında bilgi vermeye çalışacağım.

Jagged Dizi Nedir?

Şimdiye kadar matris yani düzenli dizilere göz attık. Ama bazı durumlarda her satırın eşit sütunlara sahip olmadığı dizileri de kullanmamız gerekebilir.

Jagged diziler, her satırının uzunluğu farklı olan (Aynıda olabilir) dizilerdir diyebiliriz.

Neden Jagged Dizileri Kullanmalıyız?

Az öncede bahsettiğimiz gibi bazen dizi satır uzunlukları aynı olmayan veriler olabilir elimizde. Bu verileri Matris bir dizide tutmak, yazma ve erişim anında farklı kontrolleride yazmamızı gerektirecektir. Birincisi böylesi bir kod karmaşıklığından kurtulmak için.

İkincisi ise ramden tasarruf etmemizi sağlar. Bu ikinci özelliği örneğimizle beraber anlatacağım.

Tanımlama

VeriTipi[][] Dizi_İsmi = new VeriTipi[SatırSayısıDeğeri][];

Burada tanımlamada dikkat etmemiz gereken olay dizinin boyutu verilirken sadece satırının boyutunun verildiğidir. Çünkü Sütun değerleri her satır için değişecektir.

Jagged Mantığı

Şimdi bir örnek ile olayın mantığını anlamaya çalışalım.

Bir okulda 3 tane sınıf olsun ve bu sınıftaki öğrencilerin isimleri bir dizide tutulacak olsun. 1. sınıf 3 kişi 2. sınıf 5 kişi 3. sınıf 2 kişi olsun.

Matris bir dizi oluştursaydık şunu yapardık. En uzun sütun hangisi ise ona göre 3*5’lik bir matris dizi tanımlardık.

Elemanlar bu diziye yerleştiğinde 1. sınıftan 2 kişilik yer boş kaldı 3. sınıftanda 3 kişilik yer boş kaldı. Ama bu ram de bir yer kapladı. Boşu boşuna bellek harcamış olduk. İşte bu işi Jagged bir dizi ile yapsaydık şöyle olacaktı.

Her satırda ne kadar sütuna ihtiyacımız var ise o kadar alan açacaktık ve değerleri de bu alanlara girecektik. Yalın üretimin olmazsa olmazı israfı önle. Bellek israfının böylece önüne geçmiş olduk.

Şimdi bir örnek proje ile bu bilgilerimizi pekiştirelim.

Proje Tanımı

Dışarıdan 3 kelime alınız. Her gelen kelimenin karakterlerini diziye alınız. Bu her kelimenin 3. karakterini ekranda gösteriniz.

Proje Tasarımı

 

Proje Kodları

 

 

Proje Ekran Görüntüleri

 

Kod İncelemesi

  • string[][] İsimler = new string[3][];

Boyutu belirli olan 3 satırdan oluşacağını bildiğim Jagged dizimi tanımladım. Bunu global olarak tanımladım.

  • int i = -1;
    string isim;

Döngü şartı ve textden gelen değeri tutacak isim değişkeni.

  • i++;

Öncelik i değerimizi artırıyoruz. İlk değer olarak 0 a ulaşmasıyla işlem başlıyor.

  • if (i<4)

Dizi sadece 3 tane değer alabileceği için i nin 4 den küçük olma durumunda bu işlem gerçekleşsin diyoruz. Böylece sadece 3 tane isim değeri işleme girebilecek.

  • isim = textBox1.Text;

İsim değerini aldık.

  • switch (i)
    {
    case 0: label2.Text = isim; break;
    case 1: label3.Text = isim; break;
    case 2: label4.Text = isim; break;
    default:
    break;
    }

Switch case kısmı biraz programı kullanışlı hale getirmek için yazdığımız kodlar.

  • İsimler[i] = new string[isim.Length]; 

Burada isimler dizisinin belirlenen satırının gelen isim değişkeninin uzunluğuna göre boyutunu belirliyoruz.

  • for (int j = 0; j < isim.Length; j++)
    {
    İsimler[i][j] = isim[j].ToString();
    }

Bu kısımda değerleri dizinin ilgili alanlarına yazdırıyoruz.

  • textBox1.Clear();

Burada textbox ın içini boşaltıyoruz.

 

  • label5.Text = İsimler[0][2];
    label6.Text = İsimler[1][2];
    label7.Text = İsimler[2][2];

Her satırın 3. elemanını istediğimiz labellara yazdırıyoruz ve böylece amacımıza ulaşıyoruz.

Son olarak sizlere çok boyutlu bir Jagged dizisini nasıl oluşturabileceğinizi göstereceğim.

Çok Boyutlu Jagged Dizi Tanımlama

Hemen bir örnekle olayı anlamaya çalışalım.

Az önceki örneğimizi biraz geliştirelim. Her sınıftaki öğrencilerin iki adette sınav notları bu dizide tutulacak olsun.

 

Bu şekilde öncelikle değer tanımları gerçekleştirilip sonrada atamaları yapılabilir.

Değer Ataması

Bir tanesini örnek olarak göstereceğim.

  1. sınıfın ilk öğrencisinin 2 notunu girmek istersem.

Öğrenci[0][0,0]= 56;

Öğrenci[0][0,1] = 100;

şeklinde gerçekleştirilecektir.

Bu dersimizde bu kadardı. Bir sonraki yazımda görüşmek üzere.

Facebook Sayfamizdan Bizleri Takip Edebilirsiniz
Murat Bilginer

Industryolog Akademi Founder – Endüstri Mühendisi
Canias ERP Troia Geliştiricisi & Yazılım Uzmanı
7 Yıldır bildiğini paylaşmak için çabalayan bir blogger.

http://muratbilginer.net/