Thread overview
February 02, 2013

Merhaba

Elimde bir associative array var

auto dizi = ["key1": "değeri"];
dizi.keydeğiştir("key1", "key2");

şeklinde dizinin o elamanını silip yeniden yazmadan nasıl yapabilirim?

Zekeriya

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

February 02, 2013

Fazla düşünmeden, hızlıca aklıma gelen; ya tutarsa...:)

struct kolayDizi(T, K) {
     //  v--- b(ilgi)
 private T[K] verisi;
     //    ^--- (a)nahtar
 void aDeğiştir(K önce, K sonra) {
     T yedek = verisi[önce];
     verisi.remove(önce);
     verisi[sonra] = yedek;
 }
}

void main() {
 auto rakamlar = kolayDizi!(int, string)(
                 [ "sıfır": 0, "bir": 1 ]);
   rakamlar.writeln;
 rakamlar.aDeğiştir("sıfır", "zero");
 rakamlar.writeln;
}/*
[ "sıfır": 0, "bir": 1 ]
[ "zero": 0, "bir": 1 ]
*/

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

February 02, 2013

:) Bu şekilde elbette yapılabilir de gereksiz yere işlemler yapılıyormuş gibi geliyor sadece keyi direk değiştirmenin bir yolu vardır belki diye sordum :)

Dizinin içinde büyük bir elaman olsa işlemin yapılması çok vakit alacaktır :) Sadece keyi değiştirebilsek çok güzel olacak :) :) Belki de asm ile bunu yapabiliriz.

Zekeriya

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

February 02, 2013

Bilemiyorum, adamlar remove diye bir özellik vermiş ama zannedersem change diye bir özellik yok. Sonuçta bunlar hashtable özellikli oldukları için ve bunu key'e göre yapmadıklarından (malum sıralama A'dan Z'ye olmuyor!) hız konusunda kendimizi algoritmasına emenet edeceğiz...:)

Haa şu var ama:

Hızdan endişe ediyorsak, hastable'ın istediğimiz zaman regenerate olmasını sağlayabiliyoruz...

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

February 02, 2013

Peki hashtable üzerinde bu değişikliği nasıl yapabiliriz?

Zekeriya

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

February 02, 2013

Şu başlık çok işine yarayabilir: http://ddili.org/forum/thread/922

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

February 02, 2013

Ne yazık ki elimizdeki (dmd) hashtable'da böyle bir olanak yok. Bana yaygın bir ihtiyaç gibi gelmiyor. O yüzden düşünülmemiştir belki de.

Ali

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

February 03, 2013

Alıntı:

>

Ne yazık ki elimizdeki (dmd) hashtable'da böyle bir olanak yok. Bana yaygın bir ihtiyaç gibi gelmiyor. O yüzden düşünülmemiştir belki de.

Yine sormadan edemeyeceğim ASM ile de mi yapılamaz?

Zekeriya

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

February 03, 2013

Tabii yapılır ama ASM olmadan da yapılır. Bu veri yapısının bellekte nasıl durduğunu bilsek önce anahtarları barındıran yere gider ve çıkartılacak olan anahtarı o gözdeki bağlı listeden çıkartırız. Sonra, yeni anahtarın durması gereken bağlı listeye gider ona yine anahtarı ekleriz. Bu arada veriyi kopyalamadığımız için "çıkart ve tekrar ekle" yönteminden daha hızlı olur.

Bu ancak kullanılan AA'nın iç yapısı bilindiğinde işler. İç yapısı github'da var ama her an değişebilecek bir gerçekleştirmeye böylesine bağlı kalmak akıl kârı değil. Onun yerine kendi eşleme tablomuzu yazsak? Anahtar değiştirme olanağı da olsa?

Ali

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