Thread overview
Eşleme tablolarıyla get(), byKey(), ve byValue()
Jun 30, 2010
Mengu
Feb 26, 2012
zafer
June 29, 2010

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. ]

June 30, 2010

yeni bir sey daha ogrendik ali ustadim, eline saglik. :)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 26, 2012

Eline sağlık Ali, detaylı ve güzel bir açıklama olmuş.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 26, 2012

Bunları şu iki bölüme ekledim:

http://ddili.org/ders/d/esleme_tablolari.html

http://ddili.org/ders/d/foreach_dongusu.html

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]