Thread overview
Eşleme tablosu sıralama
Nov 04, 2016
zafer
Nov 10, 2016
zafer
November 05, 2016

Merhaba,

Aşağıdaki gibi bir örnek üzerinde çalışıyorum. Aklımı karıştıran konu, eşleme tablosunu yazdırırken elemanların farklı sırada gelmesi, bu sırayı nasıl koruyabilirim?
*
dmd 2.072.0*

import std.stdio;

void main()
{
   string[string] ozellikler = [
           "renk" : "Kırmızı, Beyaz, Mavi",
           "beden" : "28, 32, 38, 40",
           "kumas" : "Yün, İpek"
       ];


   foreach (key, value; ozellikler)
   {
       writefln("key: %s -- value: %s", key, value);
   }

   writefln("Baska test: %s", ozellikler);
}

Bu kodların bendeki çıktısı şöyle;
Alıntı:

>

key: renk -- value: Kırmızı, Beyaz, Mavi
key: kumas -- value: Yün, İpek
key: beden -- value: 28, 32, 38, 40
Baska test: ["renk":"Kırmızı, Beyaz, Mavi", "kumas":"Yün, İpek", "beden":"28, 32, 38, 40"]

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

November 05, 2016

Eşleme tablolarının en çekici tarafı, sıranın önemli olmadığı durumlarda kullanılmaları. Şu anahtara karşılık gelen değer nedir diye sorguluyor, değeri alıyor ve kullanıyoruz. Hem bu işlem hem de eleman eklemek hep O(1) karmaşıklığında işlemler. (Bilmeyen arkadaşlar varsa, O(1) sabit zamanda demek; yani, tablonun büyüklüğünden bağımsız olarak işlemler hep aynı sürede gerçekleşiyor.)

Dolayısıyla, sıra önemliyse, yani elemanları hep sıralı olarak görmek istiyorsak belki de AA yerine buna daha uygun bir topluluk türü kullanmamız gerekir. Akla ilk gelen, sıralı ağaçtır. Bunun için std.container.rbtree modülündeki RedBlackTree uygun olabilir.

Yine de, eğer sıralı görme işlemi çok sık yapılmayacaksa veya zaten tablo korkunç büyük değilse anahtarları bir diziye kopyalayıp o diziyi sıralayabiliriz:

   import std.array;
   import std.algorithm;
   auto siraliAnahtarlar = sort(ozellikler.byKey.array);

   foreach (key; siraliAnahtarlar)
   {
       writefln("key: %s -- value: %s", key, ozellikler[key]);
   }

Ali

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

November 05, 2016

Aslında burada tembel olan byKey'i kullanmak yerine hevesli olan .keys'i de kullanabiliriz çünkü zaten bir dizi oluşturmak istiyoruz:

   auto siraliAnahtarlar = sort(ozellikler.keys);

Ali

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

November 10, 2016

Eşleme tablolarının en önemli özelliği olan sırasız kullanınımı unutmuşum :blush:

Anahtarları sıralayarak elemanları sıraya koyma fikri güzelmiş, teşekkürler.

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