Dizi
- İngilizcesi
- Array
- Okunuşu
- ırey
Kısaca
Dizi, tek bir ad altında saklanan ve her öğesine genellikle 0'dan başlayan indeks adlı sayısal konumuyla erişilen, sıralı bir değerler koleksiyonudur.
Dizi (array) nedir?
Dizi, kullanıcı adları listesi ya da bir dizi sıcaklık ölçümü gibi birden çok değeri belirli bir sırayla tutar. Her öğe için ayrı bir değişken oluşturmak yerine hepsini tek bir dizide saklar ve her öğeye indeksiyle başvurursunuz. JavaScript, Python, Java ve C dahil çoğu dilde ilk öğe 0. indekste, ikincisi 1. indekste durur ve bu böyle sürer.
C gibi düşük seviyeli dillerde dizi, öğelerin yan yana durduğu sabit boyutlu bir bellek bloğudur. Her yuva aynı boyutta olduğu için bilgisayar basit bir aritmetikle doğrudan istenen indekse atlayabilir; bu yüzden items[500] okumak items[0] okumak kadar hızlıdır ve buna O(1), yani sabit zaman denir. Üst seviyeli diller genellikle öğe ekledikçe otomatik büyüyen dinamik diziler sunar; JavaScript dizileri, Python listeleri ve Java'nın ArrayList sınıfı bunlara örnektir.
Numaralı bir posta kutusu sırası dizi için iyi bir benzetmedir: her kutunun bir numarası vardır, kutular sıralıdır ve ilk altısını açmadan doğrudan 7. kutuya gidebilirsiniz. Diziler, bir veritabanı sorgusunun döndürdüğü satırları tutmaktan bir görüntünün piksellerini saklamaya dek programlamada hemen her yerde kullanılır. Genellikle döngülerle ya da map, filter ve reduce gibi metotlarla işlenirler.
Diziler sıklıkla bağlı listeler (linked list) ve nesneler ya da sözlüklerle karşılaştırılır. Bir dizinin başına ya da ortasına öğe eklemek veya oradan öğe silmek yavaştır, çünkü sonraki tüm öğelerin kayması gerekir; bağlı liste bunu ucuza yapabilir ama doğrudan bir indekse atlayamaz. Nesne ya da sözlük ise değerleri sayısal konumlar yerine adlandırılmış anahtarlar altında saklar.
Bir bakışta
Önemli noktalar
- Dizi, sıralı bir değerler listesini tek bir ad altında saklar.
- Öğelere, genellikle 0'dan başlayan indeksle erişilir.
- İndeksle öğe okumak, dizi ne kadar büyük olursa olsun hızlı, yani O(1)'dir.
- Başa ya da ortaya öğe eklemek veya silmek, diğer öğelerin kayması gerektiği için daha yavaştır.
- JavaScript dizileri ve Python listeleri gibi dinamik diziler otomatik olarak yeniden boyutlanır.
Örnek
// Create an array of three strings
const fruits = ["apple", "banana", "cherry"];
console.log(fruits[0]); // "apple" (indexes start at 0)
console.log(fruits.length); // 3
fruits.push("date"); // add an item to the end
fruits[1] = "blueberry"; // replace an item by its index
// Build a new array by transforming each item
const upper = fruits.map((fruit) => fruit.toUpperCase());
console.log(upper); // ["APPLE", "BLUEBERRY", "CHERRY", "DATE"]Sık sorulan sorular
Diziler neden 0. indeksten başlar?
C gibi dillerde indeks, belleğe yerleştirilmiş dizinin başlangıcından olan uzaklıktır (offset); dolayısıyla ilk öğe sıfır adım uzaktadır. Sonraki dillerin çoğu bu geleneği sürdürdü, ancak Lua, MATLAB ve R gibi birkaçı saymaya 1'den başlar.
Dizi ile liste arasındaki fark nedir?
Terimler çakışır. Klasik olarak dizi, bellekte bitişik ve sabit boyutlu bir bloktur; liste ise büyüyüp küçülebilir. Python'ın list ve JavaScript'in Array yapıları aslında hızlı indeks erişimini otomatik yeniden boyutlandırmayla birleştiren dinamik dizilerdir.
JavaScript'te bir değerin dizi olup olmadığını nasıl kontrol ederim?
Yalnızca diziler için true döndüren Array.isArray(value) kullanın. typeof operatörü burada işe yaramaz, çünkü düz nesneler gibi diziler için de "object" döndürür.
Sık karşılaştırılanlar
İlgili sayfalar
- Veri türüProgramlamanın Temelleri, s. 54Veri türü, bir programa bir verinin sayı ya da metin gibi hangi tür bir değer taşıdığını ve hangi işlemlerin ona uygulanabileceğini söyleyen sınıflandırmadır.
- DöngüProgramlamanın Temelleri, s. 16Döngü, bir kod bloğunu belirli sayıda, bir koleksiyondaki her öğe için bir kez ya da bir koşul doğru kaldığı sürece tekrar eden bir kontrol yapısıdır.
- Big O gösterimiProgramlamanın Temelleri, s. 4Big O gösterimi, girdi büyüdükçe bir algoritmanın çalışma süresinin ya da bellek kullanımının nasıl arttığını, kesin hız yerine büyüme oranıyla anlatır.
- AlgoritmaProgramlamanın Temelleri, s. 1Algoritma, bir listeyi sıralamak ya da en kısa yolu bulmak gibi bir sorunu çözmek veya bir işi tamamlamak için izlenen, sonlu ve adım adım yönergeler bütünüdür.
- DeğişkenProgramlamanın Temelleri, s. 10Değişken, bir programda sayı ya da metin gibi bir değeri tutan ve kodun çalışırken okuyup değiştirebildiği, adlandırılmış bir depolama alanıdır.
- JSONBackend ve API'ler, s. 24JSON, yapılandırılmış veriyi anahtar-değer çiftleri ve listelerle saklayıp aktarmaya yarayan, insanın da makinenin de okuyabildiği hafif bir metin biçimidir.
- Two PointersVeri Yapıları, s. 34Two pointers tekniği, bir dizi ya da listeyi basit kurallarla ilerleyen iki indeksle tarar; iç içe döngü ister gibi görünen birçok problemi tek geçişte çözer.
- Sliding WindowVeri Yapıları, s. 31Sliding window tekniği, dizi ya da string'in ardışık parçalarıyla ilgili problemleri alt dizileri baştan hesaplamadan, pencereyi kaydırıp güncelleyerek çözer.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin