Forum: Ders Arası RSS
foreach döngü sayacı için std.range.enumerate
acehreli (Moderatör) #1
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: foreach döngü sayacı için std.range.enumerate
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
Avatar
Salih Dinçer #2
Üye Ock 2012 tarihinden beri · 1912 mesaj · Konum: İstanbul
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Bunu görmemişim, dikkatimden kaçmış! Teşekkürler hocam...

Programcı için hatırlanması kolay (çünkü dilimize İtalyanca'dan giren numero, onlara da Latince'den girdiği için) ve alternatif kullanımına göre az kaynak tüketen kısa kod iyi düşünülmüş görünüyor. Emeği geçen herkesi kutlarım; tabii ki son kertede Ali hocama :)

Sevgiler, saygılar...
Bilgi paylaştıkça bir bakmışız; kar topu olmuş ve çığ gibi üzerimize geliyor...:)
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Forum: Ders Arası RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-21, 19:31:57 (UTC -08:00)