Çok boyutlu diziler ve parçalı diziler (jagged arrays) — Visual Basic'te koleksiyonlarla çalışma için iki farklı yapıdır. Başlangıçta VB (VB6, .NET) yalnızca dikdörtgen (iki boyutlu, üç boyutlu) dizileri destekliyordu. Daha sonra .NET ile birlikte parçalı dizilerin ayrı bir nesne olarak desteği geldi.
Geleneksel çok boyutlu diziler (örneğin, Dim matrix(2,3) As Integer) verilerin tablosunun mutlaka dikdörtgen olduğu durumlarda yararlıdır. Parçalı diziler (jagged) VB.NET'e eklenmiş olup iç dizinin eleman sayısının farklı olmasına olanak tanır.
Yanlış bir yaklaşım seçimi ya verimsiz bellek kullanımına (örneğin, dikdörtgen dizilerde tüm satırlar sabittir) ya da elemanlara erişim mantığında hatalara (bir erişim hatası alabilirsiniz) yol açar. Sıklıkla sözdizimi ve başlatma yöntemleri karıştırılır.
Dikdörtgen (multidimensional) diziler, içerik her zaman dolu olduğunda (örneğin, bir oyun alanı) seçilir. Jagged diziler ise satırların farklı uzunlukta olduğu durumlarda (örneğin, farklı sınıflardaki öğrencilerin listeleri) kullanılır. Elemanlara erişim yöntemleri birbirinden farklıdır.
Kod örneği:
' Çok boyutlu dizi Dim rect(1, 2) As Integer ' 2 satır, 3 sütun (sıfırdan indeksleme) rect(0,0) = 1 : rect(0,1) = 2 : rect(0,2) = 3 rect(1,0) = 4 : rect(1,1) = 5 : rect(1,2) = 6 ' Jagged dizi Dim jagged(2)() As Integer ' 3 elemanlı bir dizi, her biri dizi jagged(0) = New Integer() {1, 2} jagged(1) = New Integer() {3, 4, 5} jagged(2) = New Integer() {6} Console.WriteLine(rect(1,2)) ' 6 Console.WriteLine(jagged(1)(2)) ' 5
Anahtar özellikler:
Jagged dizi Dim a(2,3) As Integer ile tanımlanabilir mi?
Cevap: Hayır, bu, dikdörtgen bir dizi oluşturur. Parçalı diziler şöyle tanımlanır: Dim a(2)() As Integer veya Dim a As Integer()().
Jagged yapının iç dizisi başlatılmazsa ve bir elemana erişmeye çalışırsak ne olur?
Cevap: İç dizi oluşturulmadığı için NullReferenceException istisnası fırlatılır.
Bir boyutlu dizi ile jagged dizinin boyut uzunluğunu alma sözdizimi arasındaki fark nedir?
Cevap: Dikdörtgen için: a.GetLength(0) (satır sayısı), a.GetLength(1) (sütun sayısı). Jagged için: a.Length (satır sayısı), a(i).Length (i. satırda eleman sayısı).
Sınıflara göre öğrenci listesi saklamak için dikdörtgen bir dizi (10, 30) seçildi — boş elemanlar kullanılmıyor, bazı sınıfların maksimum öğrenci sayısından daha az öğrencisi var.
Artıları:
Eksileri:
Jagged dizi kullanılıyor: her iç dizi gerçekten o sınıfın öğrenci listesidir, bellek tasarrufu ve işlemenin kolaylığı sağlıyor.
Artıları:
Eksileri: