Thread overview
Çokuzlulardan oluşan verileri kullanmak
Jan 09, 2017
erdem
Jan 10, 2017
erdem
January 09, 2017

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.

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

January 10, 2017

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/treeview.html#filtering

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]);
}

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

January 09, 2017

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

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

January 10, 2017

Ben de aynen onu söyleyecektim: Çok yetenekli yapılarımız dururken çoğu durumda çokuzlulara gerek olmuyor.

Ali

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