D Programlama - İlişkili Diziler
İlişkilendirilebilir dizilerin bir tam sayı olmayan ve seyrek olarak doldurulabilen bir indeksi vardır. İlişkilendirilebilir bir dizinin indisineKeyve türüne KeyType.
İlişkili diziler, KeyType'ın bir dizi bildiriminin [] içine yerleştirilmesiyle bildirilir. İlişkilendirilebilir dizi için basit bir örnek aşağıda gösterilmiştir.
import std.stdio;
void main () {
int[string] e; // associative array b of ints that are
e["test"] = 3;
writeln(e["test"]);
string[string] f;
f["test"] = "Tuts";
writeln(f["test"]);
writeln(f);
f.remove("test");
writeln(f);
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
3
Tuts
["test":"Tuts"]
[]
İlişkilendirilebilir Diziyi Başlatma
İlişkilendirilebilir dizinin basit bir başlangıcı aşağıda gösterilmektedir.
import std.stdio;
void main () {
int[string] days =
[ "Monday" : 0,
"Tuesday" : 1,
"Wednesday" : 2,
"Thursday" : 3,
"Friday" : 4,
"Saturday" : 5,
"Sunday" : 6 ];
writeln(days["Tuesday"]);
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
1
İlişkilendirilebilir Dizinin Özellikleri
İlişkilendirilebilir bir dizinin özellikleri şunlardır -
Sr.No. | Özellik ve Açıklama |
---|---|
1 | .sizeof İlişkilendirilebilir diziye başvurunun boyutunu döndürür; 32 bitlik yapılarda 4 ve 64 bit yapılarda 8'dir. |
2 | .length İlişkili dizideki değerlerin sayısını döndürür. Dinamik dizilerin aksine, salt okunurdur. |
3 | .dup Aynı boyutta yeni bir ilişkilendirilebilir dizi oluşturun ve ilişkilendirilebilir dizinin içeriğini buna kopyalayın. |
4 | .keys İlişkilendirilebilir dizideki anahtarlar olan dinamik diziyi döndürür. |
5 | .values Öğeleri ilişkilendirilebilir dizideki değerler olan dinamik diziyi döndürür. |
6 | .rehash Aramaların daha verimli olması için ilişkilendirilebilir diziyi yerinde yeniden düzenler. yeniden doldurma, örneğin program bir sembol tablosunu yüklemeyi bitirdiğinde ve şimdi hızlı aramalara ihtiyaç duyduğunda etkilidir. Yeniden düzenlenen diziye bir başvuru döndürür. |
7 | .byKey() İlişkili dizinin anahtarları üzerinde yineleme yapacak bir ForeachStatement için Toplama olarak kullanılmaya uygun bir temsilci döndürür. |
8 | .byValue() İlişkili dizinin değerleri üzerinde yineleme yapacak bir ForeachStatement için Toplama olarak kullanılmaya uygun bir temsilci döndürür. |
9 | .get(Key key, lazy Value defVal) Anahtar arar; varsa karşılık gelen değeri döndürür, aksi takdirde defVal'i değerlendirir ve döndürür. |
10 | .remove(Key key) Anahtar için bir nesneyi kaldırır. |
Misal
Yukarıdaki özelliklerin kullanımına bir örnek aşağıda gösterilmiştir.
import std.stdio;
void main () {
int[string] array1;
array1["test"] = 3;
array1["test2"] = 20;
writeln("sizeof: ",array1.sizeof);
writeln("length: ",array1.length);
writeln("dup: ",array1.dup);
array1.rehash;
writeln("rehashed: ",array1);
writeln("keys: ",array1.keys);
writeln("values: ",array1.values);
foreach (key; array1.byKey) {
writeln("by key: ",key);
}
foreach (value; array1.byValue) {
writeln("by value ",value);
}
writeln("get value for key test: ",array1.get("test",10));
writeln("get value for key test3: ",array1.get("test3",10));
array1.remove("test");
writeln(array1);
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
sizeof: 8
length: 2
dup: ["test":3, "test2":20]
rehashed: ["test":3, "test2":20]
keys: ["test", "test2"]
values: [3, 20]
by key: test
by key: test2
by value 3
by value 20
get value for key test: 3
get value for key test3: 10
["test2":20]