Eşleme Tabloları Çözümleri
- Eşleme tablosunun
.keysniteliği, bütün indeksleri içeren bir dizi döndürür. Bu dizinin elemanlarını birfordöngüsünde gezersek, ve her birisi için eşleme tablosunun.removeniteliğini kullanırsak bütün elemanlar eşleme tablosundan silinmiş olurlar ve sonuçta tablo boşalır:
import std.stdio; void main() { string[int] isimleSayılar = [ 1 : "bir", 10: "on", 100:"yüz", ]; writeln("Başlangıçtaki tablo büyüklüğü : ", isimleSayılar.length); int[] indeksler = isimleSayılar.keys; for (int i = 0; i != indeksler.length; ++i) { writeln(indeksler[i], " indeksinin elemanını siliyorum"); isimleSayılar.remove(indeksler[i]); } writeln("Sildikten sonraki tablo büyüklüğü: ", isimleSayılar.length); }
O çözüm özellikle büyük tablolarda yavaş olacaktır. Aşağıdaki çözümlerin ikisi de tabloyu bir seferde boşaltırlar.
- Eşleme tablosunun
- Başka bir çözüm, eşleme tablosuna kendisiyle aynı türden boş bir tablo atamaktır:
- Her türün
.initniteliği, o türün ilk değeri anlamındadır. Bir eşleme tablosunun ilk değeri de boş tablo olduğu için, bir önceki çözümün de eşdeğeri olan şunu kullanabiliriz: - Burada öğrenci ismine karşılık birden fazla not tutmak istiyoruz. Yani bir dizi not... Eğer eşleme tablomuzu
string'denint[]türüne eşleyecek şekilde tanımlarsak, isimle eriştiğimiz eleman, birintdizisi olur. O dizinin sonuna not ekleyerek de amacımıza erişiriz:
string[int] boşTablo;
isimleSayılar = boşTablo;
isimleSayılar = isimleSayılar.init;
import std.stdio; void main() { /* * Eşleme tablosunun indeks türü string; eleman türü ise * int[], yani bir int dizisi... Belirginleştirmek için * aralarında boşlukla tanımlıyorum: */ int[] [string] notlar; /* * Artık "emre" indeksine karşılık gelen elemanı bir int * dizisi gibi kullanabiliriz */ // Diziye notlar eklemek: notlar["emre"] ~= 90; notlar["emre"] ~= 85; // Diziyi yazdırmak writeln(notlar["emre"]); }
Notları teker teker eklemek yerine hepsini bir dizi olarak da atayabiliriz:
import std.stdio; void main() { int[][string] notlar; notlar["emre"] = [ 90, 85, 95 ]; writeln(notlar["emre"]); }