foreach döngüsünde dilim kullanıldığında otomatik olarak sayaç desteği olduğunu biliyoruz:
foreach (sayaç, eleman; dilim)
Ne yazık ki başka türler için böyle bir destek bulunmuyor. Onun için şurada 'sequence!"n"' ve 'zip' çözümünü önermiştim:
http://ddili.org/ders/d/foreach_opapply.html
dmd 2.067 çok daha şık olan 'enumerate' ("numaralandır") algoritmasını getiriyor. FibonacciSerisi() üzerinde bir örnek:
struct FibonacciSerisi
{
int baştaki = 0;
int sonraki = 1;
enum empty = false;
@property int front() const
{
return baştaki;
}
void popFront()
{
int ikiSonraki = baştaki + sonraki;
baştaki = sonraki;
sonraki = ikiSonraki;
}
}
import std.stdio;
import std.range;
void main()
{
foreach (i, eleman; FibonacciSerisi().take(10).enumerate) {
writefln("%s: %s", i, eleman);
}
}
'enumerate' yerine 'sequence!"n"' ve 'zip' kullanıldığında ise daha karmaşık oluyordu:
foreach (i, eleman; zip(sequence!"n", FibonacciSerisi()).take(10))
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]