Eşleme tabloları (associative arrays) ben D öğrenmeye başladıktan sonra değişti. Eskiden dilin iç olanağıydı; bir kaç sürüm öncesinden beri dmd/src/druntime/import/object.di içinde tanımlı olan bir yapı...
get(), indeks tabloda varsa tablodaki değerini döndürüyor, yoksa bizim ona söylediğimiz değeri döndürüyor
byKey(), tabloyu indeks indeks ilerliyor; keys()'den daha iyi, çünkü keys() bütün indeksleri bir dizi olarak döndürür
byValue(), tabloyu değer değer ilerliyor; values()'dan daha iyi, çünkü values() bütün değerleri bir dizi olarak döndürür
import std.stdio;
void main()
{
string[int] tablo = [ 1:"one", 2:"two", 4:"four" ];
// Bunu kullanıyorduk
writeln("\nforeach ile değerler:");
foreach (değer; tablo) {
writeln(değer);
}
// Bunu da kullanıyorduk
writeln("\nforeach ile indeksler ve değerler:");
foreach (indeks, değer; tablo) {
writeln(indeks, ": ", değer);
}
// Bunları da biliyorduk; bunlar bütün indeks ve değerlerden oluşan
// dizi döndürdükleri için, tablo çok büyükse oldukça pahalı işlemler
// olarak kabul edilebilirler:
writeln("\nkeys() ile bütün indeksler:");
writeln(tablo.keys());
writeln("\nvalues() ile bütün değerler:");
writeln(tablo.values());
// Bunu yeni öğrendim
writeln("\nforeach ve byKey() ile indeksler:");
foreach (indeks; tablo.byKey()) {
writeln(indeks);
}
// Bunu yeni öğrendim
writeln("\nforeach ve byValue() ile değerler:");
foreach (değer; tablo.byValue()) {
writeln(değer);
}
string bilinmeyen = "?";
// Bunu yeni öğrendim
writeln("\nBulunmayanlar için varsayılan değer ile:");
foreach (i; 0 .. 5) {
// İndeks tabloda yoksa, get() 'bilinmeyen'i döndürür
writeln(i, ": ", tablo.get(i, bilinmeyen));
}
// Yukarıdakini öğrenmeden önce şöyle yapardım:
writeln("\nYukarıdakinin aynısı, 'in' ve gösterge ile:");
foreach (i; 0 .. 5) {
string * değer = (i in tablo);
writeln(i, ": ", (değer ? *değer : bilinmeyen));
}
// Veya şöyle yapardım:
writeln("\nYukarıdakinin aynısı, 'in' ile ve [] işleciyle:");
foreach (i; 0 .. 5) {
writeln(i, ": ", (i in tablo) ? tablo[i] : bilinmeyen);
}
}
Çıktısı:
'
foreach ile değerler:
one
two
four
foreach ile indeksler ve değerler:
1: one
2: two
4: four
keys() ile bütün indeksler:
1 2 4
values() ile bütün değerler:
one two four
foreach ve byKey() ile indeksler:
1
2
4
foreach ve byValue() ile değerler:
one
two
four
Bulunmayanlar için varsayılan değer ile:
0: ?
1: one
2: two
3: ?
4: four
Yukarıdakinin aynısı, 'in' ve gösterge ile:
0: ?
1: one
2: two
3: ?
4: four
Yukarıdakinin aynısı, 'in' ile ve [] işleciyle:
0: ?
1: one
2: two
3: ?
4: four
'
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]