Forum: Ders Arası RSS
Bir yapıyı bir dizide sorgulamak
erdem (Moderatör) #1
Üye Tem 2009 tarihinden beri · 902 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Bir yapıyı bir dizide sorgulamak
struct Bölüm
{
    string bölümİsmi;
    string bölümAçıklaması;
    Sayfa[] sayfalar;
}
 
struct Sayfa
{
    string isim;
    string bağlantı;
    string resim;
    string açıklama;
}
 
    auto geçerliSayfa = Sayfa("bir", "iki", "üç", "deneme");

Diyelim ki bir tane yapımız olsun. Bu elemanları yapı olan bir dizide olup olmadığını in ile aşağıdaki gibi sorgulayabilirmiyiz.

    if (geçerliSayfa in bölümEski.sayfalar)
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4412 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Bu istek fazla sık olmasa da belirtiliyor. Hayır, in işleci D dizileriyle kullanılamıyor (eşleme tablolarıyla (associative arrays) kullanılıyor). Ama kendi türlerimiz için tanımlayabiliyoruz:

  http://ddili.org/ders/d/islec_yukleme.html#ix_islec_yuklem…

O zaman yine de sayfalar üzerinde değil, bölümde arayabilirsin:
    if (geçerliSayfa in bölümEski)
Ama bunun işleyebilmesi için elinde öncelikle bir Sayfa nesnesi olması gerekir. Halbuki çoğu durumda belki de sayfa ismi ile aratmak istiyorsundur. O zaman bir de opBinaryRight!"in"(string) yüklemesi yazabilirsin. Ama iyice düşününce bunun ancak bazı özel üyeler için ve bazı özel türler için mantıklı olduğunu görürsün. Örneğin, neden kendimizi yalnızca sayfa ismiyle kısıtlayalım, vs.

En kolayı şu:
    auto bulunan = bölümEski.sayfalar.find!(sayfa => sayfa.isim == geçerliSayfa);
    if (!bulunan.empty) {
        // bulunan, bulanan noktadan sona kadar bir aralıktır
        writeln(bulunan.front);
    }
Amacın yalnızca var olup olmadığını bilmekse o zaman std.algorithm.canFind var.

Ali
erdem (Moderatör) #3
Üye Tem 2009 tarihinden beri · 902 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Ali bey teşekkürler.
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-06-24, 22:27:33 (UTC -07:00)