Hash table'ı 50 slotluk açsan dahi, binlerce ve katsayısı kadar veri girdisi yapabilirsin. Bu hiçbir sorun teşkil etmez. Tek dikkat etmen gereken
item kısmında boşluk karakteri kullanmamandır.
Data kısmı veriyi içeren kısım olmalıdır zaten.
Ek olarak hash tabloya yönelik while kullanmak, hdd-de işlem gören bir dosyaya while kullanmaktan tabiki daha hızlıdır. Bunu kendinde test edebilirsin esasında, şöyleki;
Hash table'a veri girmekde örnek: Kod:
//var %h = 1000,%t = $ticks | while (%h) { hadd -m hash %h $str(a,%h) | dec %h } | echo -> et: $calc($ticks - %t) ms İlk 5 girdinin değeri: Alıntı:
-> et: 296 ms
-> et: 312 ms
-> et: 280 ms
-> et: 296 ms
-> et: 296 ms
|
Aynı örneği
/write komutu ile hdd'ye kaydetme de kullanalım, farkı bir görelim.
Kod:
//var %h = 1000,%q = $ticks | while (%h) { write hash.txt %h $str(a,%h) | dec %h } | echo -> et: $calc($ticks - %q) ms İlk 5 girdinin değeri: Alıntı:
-> et: 12621 ms
-> et: 12433 ms
-> et: 12468 ms
-> et: 12468 ms
-> et: 12936 ms
|
Sanırım yazdırma olayındaki fark gayet açık miktarda ortada.
-
Birde okuma olayına bakalım Ram'da okutma örneği: Kod:
//var %h = 1000,%q = $ticks | while (%h) { noop $hget(hash,$hget(hash,%h).item) | dec %h } | echo -> et: $calc($ticks - %q) ms İlk 5 girdiniz değeri: Alıntı:
-> et: 62 ms
-> et: 62 ms
-> et: 31 ms
-> et: 32 ms
-> et: 78 ms
|
Hdd'de okutma örneği: Kod:
//var %h = 1000,%q = $ticks | while (%h) { noop $read(hash.txt,%h) | dec %h } | echo -> et: $calc($ticks - %q) ms İlk 5 girdinin değeri: Alıntı:
-> et: 2917 ms
-> et: 2902 ms
-> et: 2918 ms
-> et: 2948 ms
-> et: 2917 ms
|
Buraya kadar hash table'ın dosya bazlı sisteme göre ne kadar hızlı çalıştığını görmüş olduk sanırım.
Ayrıca senin isteğine göre de, while kullanımında eşitlenme gerçekleştiğinde
/break kullanman while döngüsünü sonlandırır ki buda eşitlenme/karşılaşma elde edildiği halde while döngüsünü veri tüketimine kadar devam ettirmez. Sonuç olarak daha hızlı çalışmasına bir hayli neden olacaktır.