Thread overview
Diziyi eşleme tablosu gibi ilklemek?
Nov 29, 2013
Salih Dinçer
Nov 30, 2013
agora
November 28, 2013
void main() {
   int[] a = [ 0:10, 5:50 ];
}

Yukarıdaki kullanımı herhalde bir kere görmüşüm ama şimdi tekrar karşılaşınca yine çok şaşırdım. :)

Ali

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

November 29, 2013

İstikrarlı...

Sonuçta sıradan bir diziyi, pekala ''int''['size_t']'' şeklinde ifade edebilirdik ve sıradan bir şekilde kullandığımızda veya bunun ne tür bir değişken olduğunu sorgulamadığımızda anlayamazdık.

Ama bu örnekte önemli bir fark var; o da uzunluğunu öğrendiğimizde, sanırım 6 elemanlı bir dizi olduğunu görecektik. Dolayısıyla 1, 2, 3, 4 numaralı dizinlerde (in indexes) 0 değerinin bulunması gerekiyor.

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

November 30, 2013

Buna benzer bi kullanım Python'da da vardı sanırım. Doğru anladıysam eğer hocam

indeks içinde bir index gibi alıyorduk onları

Anladigim dogru mu buradaki yapilmasi da ayni mi?

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

November 30, 2013

Buradaki istikrarın biraz dolambaçlı yoldan gelmesi hoşuma gidiyor: :)

  • Diziler elemanlara indeksle eriştirirler.

  • Eşleme tabloları elemanları (associative arrays) anahtar değeriyle eriştirirler.

  • O zaman dizileri de bir eşleme tablosu gibi görebiliriz: Elemanlara size_t değeri ile eriştirir diyebiliriz. (Tabii aynı şey değil: Veri yapısı açısından birisi array, diğeri hash table.)

  • O zaman dizilere de aynı ilkleme söz dizimini verelim.

Ali

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

November 30, 2013

Python'u o kadar bilmiyorum ama doğrudur herhalde. :)

Ali

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

December 16, 2013

Hocam yüksek değerli bir index yazınca derleme süresi gereksiz yere uzuyor fark ettiniz mi?

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

December 16, 2013

Derleme süreleri gerçekten çok fark ediyor hatta derlenmediği de oldu

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

December 16, 2013

Eminim, o diziyi bu yazımı kullanmadan ilklediğinde de aynı derecede yavaştır çünkü programın içine gömülecek olan dizi hazır değerini (array literal) derleme zamanında oluşturması gerekiyor:

   int[] a = [ 0:10, 5000:50 ];
   int[] b = [ 10, 0, /* ... gereken sayıda sıfırı elle yazdığımızı varsayalım ... */, 50 ];

Yani, bu söz dizimi yalnızca kolaylık getiriyor. Ölçmedim ama sanırım a ile b'nin derleme süreleri kabaca eşittir.

Ali

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

December 16, 2013

Hm. Yaptığım deneme benim düşündüğüm gibi olduğunu gösteriyor. Önce şu programı yazdım:

import std.stdio;

void foo(int[] a)
{
   writeln(a[0] + a[10000]);
}

void main()
{
   int[] a = [ 0:10, 10_000:50 ];
   foo(a);
}

Gerçekten de derleme süresi uzun:

'time dmd deneme.d'

Kabaca 0.9 saniyede derlendi.

Sonra o diziyi elle yazmış olsam nasıl olurdu diye denemek istedim ve 10001 elemanlı dizi oluşturan bir işlev yazdım ama tabii onu oluştururken zaman kaybedilmesin diye diziyi standart çıkışa yazdırdım:

void dizi_yap()
{
   write("int[] a = [ 10");

   foreach (i; 1..10_000) {
       write(", 0");
   }

   writeln(", 50 ];");
}

O işlevi kullanarak yazdığım programın çıktısını a_dizisi isimli bir dosyaya aktardım (o programı burada göstermiyorum):

'./deneme > a_dizisi'

Şimdi de dosyayı okuyarak kullanan bir program yazdım:

import std.stdio;

void foo(int[] a)
{
   writeln(a[0] + a[10000]);
}

void main()
{
   mixin(import("a_dizisi"));
   foo(a);
}

O import'u kullanabilmek için derleyiciye -J seçeneğinin de verilmesi gerekiyor:

'time dmd deneme.d -J.'

Derleme süresi yine kabaca 0.9 saniye oldu.

Tabii diziyi import ile derleme zamanında okumak yerine bütün programı elle de yazmış olabiliriz ama ben toplam 30K'lık kaynak kodun okunmasının o kadar etkileyeceğini sanmıyorum.

Sonuçta, evet, yavaş derleniyor ama yavaşlık bu olanaktan kaynaklanmıyor, çok büyük dizi hazır değeri kullanmaktan kaynaklanıyor.

Ali

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