D Programlama - Diziler
D programlama dili, adlandırılmış bir veri yapısı sağlar arrays, aynı türden öğelerin sabit boyutlu sıralı bir koleksiyonunu depolayan. Bir dizi veri koleksiyonunu depolamak için kullanılır. Bir diziyi aynı türden değişkenlerin bir koleksiyonu olarak düşünmek genellikle daha kullanışlıdır.
Sayı0, sayı1, ... ve sayı99 gibi tek tek değişkenleri bildirmek yerine, sayılar gibi bir dizi değişkeni bildirir ve temsil etmek için sayılar [0], sayılar [1] ve ..., sayılar [99] kullanırsınız bireysel değişkenler. Bir dizideki belirli bir öğeye bir dizinle erişilir.
Tüm diziler bitişik bellek konumlarından oluşur. En düşük adres ilk öğeye ve en yüksek adres son öğeye karşılık gelir.
Dizileri Bildirme
D programlama dilinde bir dizi bildirmek için, programcı aşağıdaki gibi bir dizi için gerekli elemanların türünü ve eleman sayısını belirler -
type arrayName [ arraySize ];
Buna tek boyutlu dizi denir. DiziBüyüklüğü sıfırdan bir tamsayı sabiti büyük olmalı ve tipi herhangi bir geçerli D programlama dili veri türü olabilir. Örneğin, adı verilen bir 10-öğeli bir dizi bildirmek için denge , tip çift Bu açıklama kullanma -
double balance[10];
Dizileri Başlatma
D programlama dili dizi öğelerini tek tek veya aşağıdaki gibi tek bir ifade kullanarak başlatabilirsiniz.
double balance[5] = [1000.0, 2.0, 3.4, 17.0, 50.0];
Sağ taraftaki köşeli parantezler [] arasındaki değerlerin sayısı, köşeli parantezler [] arasındaki dizi için belirttiğiniz öğelerin sayısından büyük olamaz. Aşağıdaki örnek, dizinin tek bir öğesini atar -
Dizinin boyutunu atlarsanız, başlatmayı tutacak kadar büyük bir dizi oluşturulur. Bu nedenle yazarsan
double balance[] = [1000.0, 2.0, 3.4, 17.0, 50.0];
daha sonra önceki örnekte yaptığınız gibi tam olarak aynı diziyi yaratacaksınız.
balance[4] = 50.0;
Yukarıdaki ifade, dizideki 5. öğe numarasına 50.0 değerini atar. 4. dizini olan dizi 5. olacaktır, yani son eleman çünkü tüm diziler ilk elemanlarının dizini olarak 0'a sahiptir ve buna taban dizini de denir. Aşağıdaki resimsel gösterim, yukarıda tartıştığımız dizinin aynısını göstermektedir -
Dizi Öğelerine Erişim
Dizi adını indeksleyerek bir elemana erişilir. Bu, elemanın dizini dizinin isminden sonra köşeli parantez içine yerleştirilerek yapılır. Örneğin -
double salary = balance[9];
Yukarıdaki açıklamada 10 sürer inci dizi ve devir değişken değer elemanı maaş . Aşağıdaki örnek, bildirimi, atamayı ve dizilere erişmeyi uygular -
import std.stdio;
void main() {
int n[ 10 ]; // n is an array of 10 integers
// initialize elements of array n to 0
for ( int i = 0; i < 10; i++ ) {
n[ i ] = i + 100; // set element at location i to i + 100
}
writeln("Element \t Value");
// output each array element's value
for ( int j = 0; j < 10; j++ ) {
writeln(j," \t ",n[j]);
}
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
Element Value
0 100
1 101
2 102
3 103
4 104
5 105
6 106
7 107
8 108
9 109
Statik Diziler ve Dinamik Diziler
Program yazılırken bir dizinin uzunluğu belirtilirse, bu dizi statik bir dizidir. Programın yürütülmesi sırasında uzunluk değişebildiği zaman, bu dizi dinamik bir dizidir.
Dinamik dizileri tanımlamak, sabit uzunluklu dizileri tanımlamaktan daha basittir çünkü uzunluğun çıkarılması dinamik bir dizi oluşturur -
int[] dynamicArray;
Dizi Özellikleri
İşte dizilerin özellikleri -
Sr.No. | Özellik ve Açıklama |
---|---|
1 | .init Statik dizi, değişmez değerin her öğesi, dizi öğesi türünün .init özelliği olan bir dizi değişmezi döndürür. |
2 | .sizeof Statik dizi, dizi öğesi başına bayt sayısıyla çarpılan dizi uzunluğunu döndürürken dinamik diziler, 32 bitlik yapılarda 8 ve 64 bitlik yapılarda 16 olan dinamik dizi başvurusunun boyutunu döndürür. |
3 | .length Statik dizi, dizideki öğelerin sayısını döndürür, dinamik diziler ise dizideki öğelerin sayısını almak / ayarlamak için kullanılır. Uzunluk, size_t tipindedir. |
4 | .ptr Dizinin ilk öğesine bir gösterici döndürür. |
5 | .dup Aynı boyutta dinamik bir dizi oluşturun ve dizinin içeriğini içine kopyalayın. |
6 | .idup Aynı boyutta dinamik bir dizi oluşturun ve dizinin içeriğini içine kopyalayın. Kopya değişmez olarak yazılmıştır. |
7 | .reverse Dizideki öğelerin sırasını tersine çevirir. Diziyi döndürür. |
8 | .sort Dizideki öğelerin sırasını yerleştirir. Diziyi döndürür. |
Misal
Aşağıdaki örnek, bir dizinin çeşitli özelliklerini açıklamaktadır -
import std.stdio;
void main() {
int n[ 5 ]; // n is an array of 5 integers
// initialize elements of array n to 0
for ( int i = 0; i < 5; i++ ) {
n[ i ] = i + 100; // set element at location i to i + 100
}
writeln("Initialized value:",n.init);
writeln("Length: ",n.length);
writeln("Size of: ",n.sizeof);
writeln("Pointer:",n.ptr);
writeln("Duplicate Array: ",n.dup);
writeln("iDuplicate Array: ",n.idup);
n = n.reverse.dup;
writeln("Reversed Array: ",n);
writeln("Sorted Array: ",n.sort);
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
Initialized value:[0, 0, 0, 0, 0]
Length: 5
Size of: 20
Pointer:7FFF5A373920
Duplicate Array: [100, 101, 102, 103, 104]
iDuplicate Array: [100, 101, 102, 103, 104]
Reversed Array: [104, 103, 102, 101, 100]
Sorted Array: [100, 101, 102, 103, 104]
D'de Çok Boyutlu Diziler
D programlama çok boyutlu dizilere izin verir. İşte çok boyutlu bir dizi bildiriminin genel biçimi -
type name[size1][size2]...[sizeN];
Misal
Aşağıdaki bildirim, üç boyutlu bir 5 oluşturur. 10. 4 tam sayı dizisi -
int threedim[5][10][4];
D'de İki Boyutlu Diziler
Çok boyutlu dizinin en basit şekli iki boyutlu dizidir. İki boyutlu bir dizi, özünde, tek boyutlu dizilerin bir listesidir. [X, y] boyutunda iki boyutlu bir tamsayı dizisi bildirmek için sözdizimini aşağıdaki gibi yazarsınız -
type arrayName [ x ][ y ];
Nerede type herhangi bir geçerli D programlama veri türü olabilir ve arrayName geçerli bir D programlama tanımlayıcısı olacaktır.
Nerede tip herhangi bir geçerli D programlama veri türünde olabilir ve arrayname geçerli D programlama kimliğidir.
İki boyutlu bir dizi, x satır sayısı ve y sütun sayısı olan bir tablo olarak düşünülebilir. İki boyutlu bir dizia üç sıra ve dört sütun içeren aşağıdaki gibi gösterilebilir -
Böylece dizideki her eleman a bir eleman tarafından tanımlanır a[ i ][ j ], nerede a dizinin adıdır ve i ve j bir içindeki her bir öğeyi benzersiz şekilde tanımlayan alt simgelerdir.
İki Boyutlu Dizileri Başlatma
Çok boyutlu diziler, her satır için köşeli parantezli değerler belirtilerek başlatılabilir. Aşağıdaki dizide 3 satır ve her satırda 4 sütun vardır.
int a[3][4] = [
[0, 1, 2, 3] , /* initializers for row indexed by 0 */
[4, 5, 6, 7] , /* initializers for row indexed by 1 */
[8, 9, 10, 11] /* initializers for row indexed by 2 */
];
Amaçlanan satırı gösteren iç içe geçmiş kaşlı ayraçlar isteğe bağlıdır. Aşağıdaki başlatma, önceki örneğe eşdeğerdir -
int a[3][4] = [0,1,2,3,4,5,6,7,8,9,10,11];
İki Boyutlu Dizi Öğelerine Erişim
2 boyutlu dizideki bir elemana alt simgeler kullanılarak erişilir, yani dizinin satır dizini ve sütun dizini anlamına gelir. Örneğin
int val = a[2][3];
Yukarıdaki ifade dizinin 3. satırından 4. elemanı alır. Bunu yukarıdaki dijital ekranda doğrulayabilirsiniz.
import std.stdio;
void main () {
// an array with 5 rows and 2 columns.
int a[5][2] = [ [0,0], [1,2], [2,4], [3,6],[4,8]];
// output each array element's value
for ( int i = 0; i < 5; i++ ) for ( int j = 0; j < 2; j++ ) {
writeln( "a[" , i , "][" , j , "]: ",a[i][j]);
}
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
a[0][0]: 0
a[0][1]: 0
a[1][0]: 1
a[1][1]: 2
a[2][0]: 2
a[2][1]: 4
a[3][0]: 3
a[3][1]: 6
a[4][0]: 4
a[4][1]: 8
D'de Ortak Dizi İşlemleri
İşte dizilerde gerçekleştirilen çeşitli işlemler -
Dizi Dilimleme
Genellikle bir dizinin bir bölümünü kullanırız ve diziyi dilimlemek genellikle oldukça faydalıdır. Dizi dilimlemeye yönelik basit bir örnek aşağıda gösterilmiştir.
import std.stdio;
void main () {
// an array with 5 elements.
double a[5] = [1000.0, 2.0, 3.4, 17.0, 50.0];
double[] b;
b = a[1..3];
writeln(b);
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
[2, 3.4]
Dizi Kopyalama
Ayrıca kopyalama dizisi kullanıyoruz. Dizi kopyalama için basit bir örnek aşağıda gösterilmiştir.
import std.stdio;
void main () {
// an array with 5 elements.
double a[5] = [1000.0, 2.0, 3.4, 17.0, 50.0];
double b[5];
writeln("Array a:",a);
writeln("Array b:",b);
b[] = a; // the 5 elements of a[5] are copied into b[5]
writeln("Array b:",b);
b[] = a[]; // the 5 elements of a[3] are copied into b[5]
writeln("Array b:",b);
b[1..2] = a[0..1]; // same as b[1] = a[0]
writeln("Array b:",b);
b[0..2] = a[1..3]; // same as b[0] = a[1], b[1] = a[2]
writeln("Array b:",b);
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
Array a:[1000, 2, 3.4, 17, 50]
Array b:[nan, nan, nan, nan, nan]
Array b:[1000, 2, 3.4, 17, 50]
Array b:[1000, 2, 3.4, 17, 50]
Array b:[1000, 1000, 3.4, 17, 50]
Array b:[2, 3.4, 3.4, 17, 50]
Dizi Ayarı
Aşağıda bir dizide değer ayarlamak için basit bir örnek gösterilmektedir.
import std.stdio;
void main () {
// an array with 5 elements.
double a[5];
a[] = 5;
writeln("Array a:",a);
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
Array a:[5, 5, 5, 5, 5]
Dizi Birleştirme
İki dizinin birleştirilmesi için basit bir örnek aşağıda gösterilmiştir.
import std.stdio;
void main () {
// an array with 5 elements.
double a[5] = 5;
double b[5] = 10;
double [] c;
c = a~b;
writeln("Array c: ",c);
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
Array c: [5, 5, 5, 5, 5, 10, 10, 10, 10, 10]