Forum: Ders Arası RSS
Çokuzlulardan oluşan verileri kullanmak
erdem (Moderatör) #1
Üye Tem 2009 tarihinden beri · 953 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Çokuzlulardan oluşan verileri kullanmak
Diyelim ki şu şekilde çokuzlulardan oluşan verilerimiz var.

import std.stdio;
 
import std.typecons;
 
 
alias Yazılım = Tuple!(string, "yazılım",
                       int, "yıl",
                       string, "dil");
 
Yazılım[] yazılımListesi = [Yazılım("Firefox", 2002"C++"),
                            Yazılım("Eclipse", 2004, "Java" ),
                            Yazılım("Pitivi", 2004, "Python")];
 
/*
  virgülle ayrılan listeye izin verilmiyor
  
auto yazılımlar =   [("Eclipse", 2004, "Java" ),
                     ("Pitivi", 2004, "Python"),
                     ("Netbeans", 1996, "Java"),
                     ("Chrome", 2008, "C++")];
*/ 
 
 
/*
  bu da doğal olarak verilerden biri tamsayı olduğu için olmuyor
  
auto yazılımlar =   ["Eclipse", 2004, "Java" ,
                     "Pitivi", 2004, "Python",
                     "Netbeans", 1996, "Java",
                     "Chrome", 2008, "C++"];
*/
 
void main()
{
}

Bunları kullanmak için üstte herbirine yazılım yazdığımız yazım şeklinden daha kolay bir şekilde kullanabilirmiyiz.

Örneğin python yorum halinde olan ilk virgülle ayrılmış yazım şekline izin veriyor. Bu verileri dizge kabul edip bir topluluğa atıp sonra 3'erli çokuzlu mu oluşturabiliriz.
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4508 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
D'nin çokuzlu olanağı sonradan düşünülmüş bir şey olduğundan Python gibi dillerle karşılaştırınca kullanışsız kalıyor. İstediklerinin hepsini herkes istiyor ama ufukta bir değişiklik görünmüyor. :)

Amaç derleme zamanında bilinen değerlerden çokuzlu oluşturmaksa ve çokuzlunun adını yazmak istemiyorsak aklıma iki yöntem geliyor:

  • Hepsini string olarak yazmak ve gerektiği biçimde tür dönüştürmek

  • AliasSeq'ten yararlanmak
import std.stdio;
import std.typecons;
 
alias Yazılım = Tuple!(string, "yazılım",
                       int, "yıl",
                       string, "dil");
 
// Hep string kullanan yöntem
auto yazılımDizisi_1(string[] değerler) {
    import std.range : array, chunks;
    import std.algorithm : map;
    import std.conv : to;
 
    return değerler
           .chunks(3)
           .map!(üçlü => Yazılım(üçlü[0], üçlü[1].to!int, üçlü[2]))
           .array;
}
 
// AliasSeq kullanan yöntem
auto yazılımDizisi_2(Param...)(Param param) {
    Yazılım[] sonuç;
 
    // Param şablon parametresi olduğundan bu foreach derleme zamanında işletilir
    foreach (i, _; param) {
        static if (i % 3 == 0) {
            sonuç ~= Yazılım(param[i], param[i+1], param[i+2]);
        }
    }
    return sonuç;
}
 
void main() {
    writeln(yazılımDizisi_1([ "Firefox", "2002""C++",
                              "Eclipse", "2004", "Java",
                              "Pitivi", "2004", "Python" ]));
 
    writeln(yazılımDizisi_2("Firefox", 2002, "C++",
                            "Eclipse", 2004, "Java",
                            "Pitivi", 2004, "Python"));
}
Ali
erdem (Moderatör) #3
Üye Tem 2009 tarihinden beri · 953 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Aslında Python'un kullandığı virgüllü liste ile çokuzluları ilklendirme olanağı dile eklense, yerel desteği de iyileştirilse güzel olurdu.
// Satırları sırala
import std.stdio, std.array, std.algorithm;
 
void main()
{
    stdin
        .byLineCopy
        .array
        .sort!((a, b) => a > b) // azalan sırada
        .each!writeln;
}
Örneğin Java'da bunun için Collator kullanılıyor. O zaman da şeklinde kullanabiliyoruz.
        Collator ölçüt = Collator.getInstance(new Locale("tr", "TR"));
        Seçerek.sırala(a,ölçüt);

Evet düşünün ki elimizde böyle basit veriler var. Bunları kullanarak kütüphaneyi tanıtmaya çalışıyoruz.

http://python-gtk-3-tutorial.readthedocs.io/en/latest/tree…

O zaman şimdilik ben basitçe yapı kullandım.
import std.stdio;
 
import std.format: formattedRead;
 
struct Yazılım
{
    string isim;
    uint yıl;
    string dil;
}
 
void main()
{
    auto kütük = File("veriler.txt", "r");
    Yazılım[] yazılımlar;
    
    foreach (satır; kütük.byLine())
    {
        string isim;
        uint yıl;
        string dil;
 
        formattedRead(satır,"\"%s\", %d, \"%s\"", &isim, &yıl, &dil);
        yazılımlar ~= Yazılım(isim, yıl, dil);
    }
 
    foreach (i, yazılım; yazılımlar)
        writeln(yazılımlar[i]);
}
acehreli (Moderatör) #4
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4508 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Ben de aynen onu söyleyecektim: Çok yetenekli yapılarımız dururken çoğu durumda çokuzlulara gerek olmuyor.

Ali
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-10-18, 02:23:10 (UTC -07:00)