यह एक hashmap के रूप में कार्य करता है। वास्तव में, प्रत्येक एक्शनस्क्रिप्ट ऑब्जेक्ट जो एक गतिशील वर्ग का उदाहरण है, हैशपैप के रूप में कार्य करता है। निश्चित रूप से चाबियाँ हमेशा गुणों के साथ टकरा सकते हैं। यह व्यवहार जावास्क्रिप्ट से आता है। मैं इसे एक डिजाइन विफलता मानता हूं।
ऐरे अलग है कि यह पूर्णांक कुंजी पर कुछ चाल करेगा, और शब्दकोश अलग है कि यह कुंजी को स्ट्रिंग में परिवर्तित नहीं करता है, लेकिन किसी ऑब्जेक्ट वैल्यू को कुंजी के रूप में उपयोग करता है। कृपया ध्यान दें कि संख्या और बूलियन दोनों स्ट्रिंग में परिवर्तित हो गए हैं।
अब आप इसकी देखभाल क्यों करेंगे कि इसे कैसे लागू किया जाए? अगर यह अच्छी तरह से लागू किया गया है, तो आप शायद जानना नहीं चाहते हैं। आप इसे बेंचमार्क कर सकते हैं। इसमें सभी परिचालनों के लिए ओ (1) है और यह काफी तेज़ है (एक खाली विधि कॉल के रूप में लगभग दोगुना समय लगाना, लागत कम करना)। कोई भी वैकल्पिक कार्यान्वयन धीमा हो जाएगा।
यहाँ एक सरल बेंचमार्क (रिहाई के लिए यह संकलन और सही खिलाड़ी में इसे चलाने के लिए सुनिश्चित करें):
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.utils.*;
public class Benchmark extends Sprite {
public function Benchmark() {
var txt:TextField = new TextField();
this.addChild(txt);
txt.text = "waiting ...";
txt.width = 600;
const repeat:int = 20;
const count:int = 100000;
var d:Dictionary = new Dictionary();
var j:int, i:int;
var keys:Array = [];
for (j = 0; j < repeat * count; j++) {
keys[j] = { k:j };
}
setTimeout(function():void {
var idx:int = 0;
var out:Array = [];
for (j = 0; j < repeat; j++) {
var start:int = getTimer();
for (i = 0; i < count; i++) {
d[keys[idx++]] = i;
}
out.push(getTimer() - start);
}
txt.appendText("\n" + out);
start = getTimer();
for (var k:int = 0; k < i; k++) {
test();
}
txt.appendText("\ncall:"+(getTimer() - start));
idx = 0;
out = [];
for (j = 0; j < repeat; j++) {
start = getTimer();
i = 0;
for (i = 0; i < count; i++) {
delete d[keys[idx++]];
}
out.push(getTimer() - start);
}
txt.appendText("\n" + out);
},3000);//wait for player to warm up a little
}
private function test():void {}
}
}
इस पर एक नज़र डालें: http://code.google.com/p/ashashmap/ –
@ जॉर्ज प्रोफेन्ज़ा: जितना अच्छा मैं इसे एस, यह एक कुल मिलाकर overkill है। क्यों कुछ ऐसा पहले से मौजूद है जो पहले से मौजूद है? – back2dos
@ back2dos आप सही हैं। यह हालांकि स्थिति पर निर्भर करता है। मैंने इसका उपयोग करने का सुझाव नहीं दिया, लेकिन एक नज़र डालने के लिए। चूंकि अशशमैप को जावा के रूप में काम करना चाहिए, इसका उपयोग करना आसान होना चाहिए, इसलिए त्वरित और गंदे नौकरी के लिए, ठीक होना चाहिए। गति महत्वपूर्ण कोड के लिए और पूरे कोड में क्या होता है, इस पर नियंत्रण रखना, शब्दकोश वस्तु को समझना और उपयोग करना आगे बढ़ना है। मैंने एक टिप्पणी जोड़ा, जवाब नहीं दिया क्योंकि यह एक अतिरिक्त बात है, असली जवाब नहीं। मुझे दिखाने के लिए धन्यवाद जहां मैं स्पष्ट नहीं हूं। –