Forum: Ders Arası RSS
Eşleme tablosu sıralama
zafer #1
Üye Tem 2009 tarihinden beri · 694 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Eşleme tablosu sıralama
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;
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"]
https://github.com/zafer06 - depo
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4412 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
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
acehreli (Moderatör) #3
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4412 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
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
zafer #4
Üye Tem 2009 tarihinden beri · 694 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
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.
https://github.com/zafer06 - depo
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-06-25, 19:09:28 (UTC -07:00)