Thread overview
Bir yapıyı bir dizide sorgulamak
Dec 16, 2016
erdem
Dec 16, 2016
erdem
December 16, 2016
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)

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

December 16, 2016

Ali bey teşekkürler.

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

December 16, 2016

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_yukleme.in,%20i%C5%9Fle%C3%A7%20y%C3%BCkleme

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

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