Merhaba Zafer Hocam,
Ben şöyle yaptım:
auto sonuc3 = kitaplar.filter!( a => a.kitap.canFind!(a => a.isim == "Phyton 3 Veri Yapıları") ).map!(a => a.kitap.find!(a => a.isim == "Phyton 3 Veri Yapıları").front );
listele(sonuc3.array); // --> 3. Phyton 3 Veri Yapıları yazdırdı
Senin örneğinde bulmamasının sebebi arama yaptığın "kitaplar" dizisinde "k3" 'ün bulunmaması.
Ben önce k3 ' bulundurmayan kitap yapılarını eledim. Sonra ilk k3 örneği geri döndüm.
Bana senin değişik bir veri yapısına ihtiyaçın varmış gibi geldi. Örneğin k3 k2'i , k2'de k3'ü içerseydi Bu örnekte değilde başka örneklerde iş baya karışabilirdi. Acaba çizit veri yapısı gibi bir şey gerekiyor olabilirmi.
Şöyle birşeyler yapmıştım ben bir ara http://ddili.org/forum/thread/1737;?unb666sess=ae7b87bda5b3ef42f536ae78358a9178. Acaba kitap yapısı eşittir örnekteki Node sınıfı. Ve Graph'da bunların listesini içeren ve bu liste üstünde algoritmalar koşan sınıf şeklinde olsaydı senin problemine uyarmıydı.
Tam kodu aşağıda bulabilirsin.
import std.stdio: writefln;
import std.datetime: DateTime;
import std.algorithm;
import std.algorithm.searching;
import std.stdio;
import std.array;
struct Kitap
{
int no;
DateTime tarih;
string isim;
Kitap[] kitap;
int opCmp(Kitap k) const
{
int sonuc = 0;
if (tarih < k.tarih) sonuc = -1;
if (tarih > k.tarih) sonuc = 1;
return sonuc;
}
}
void main()
{
Kitap k3 = Kitap(3, DateTime(2018, 2, 22, 00, 00, 00), "Phyton 3 Veri Yapıları", null);
Kitap k1 = Kitap(1, DateTime(2018, 2, 14, 00, 00, 00), "D Programlama Dili", null);
Kitap k2 = Kitap(2, DateTime(2018, 2, 18, 00, 00, 00), "Her Yönüyle Python", [k3]);
Kitap[] kitaplar = [k1, k2];
auto sonuc1 = kitaplar.find!(a => a.isim == "Phyton 3 Veri Yapıları");
listele(sonuc1); // Bulamıyor!
auto sonuc2 = kitaplar.find!(a => a.isim == "Her Yönüyle Python");
listele(sonuc2);
auto sonuc3 = kitaplar.filter!( a => a.kitap.canFind!(a => a.isim == "Phyton 3 Veri Yapıları") ).map!(a => a.kitap.find!(a => a.isim == "Phyton 3 Veri Yapıları").front );
listele(sonuc3.array); // --> 3. Phyton 3 Veri Yapıları yazdırdı
}
void listele(T)(T kitaplar)
{
writefln("Sirali Kitap Listesi :");
foreach (kitap; kitaplar.sort!((a, b) => a < b))
{
writefln("--> %d. %s", kitap.no, kitap.isim);
}
}
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]