2010-05-19 6 views
16

क्या डेल्फी 6 (मूल्यों और वस्तुओं के लिए नक्शा कुंजी) में किसी भी प्रकार का मूल मानचित्र कार्यान्वयन है - इंटरनेट अब तक कोई सहायता नहीं है। मुझे बस एक डेल्फी परियोजना मिली है, मेरी पृष्ठभूमि सी ++ और जावा है, और डेल्फी प्रोजेक्ट का पिछला देव सभी खोजों को रैखिक रूप से करता है।क्या डेल्फी 6 में मानचित्र या हैशटेबल जैसी कोई चीज है?

धन्यवाद।

+2

जो आप करने की कोशिश कर रहे हैं, डेल्फी 6 में, मैं एंड्रियास के उत्तर के साथ जाऊंगा, लेकिन टीस्ट्रिंगलिस्ट थोड़ा सीमित है। यदि आप सच जेनेरिक कंटेनर चाहते हैं जैसे कि आप सी ++ एसटीएल में पा सकते हैं, तो आपको डेल्फी 2010 की आवश्यकता है। (उन्हें डेल्फी 200 9 में पेश किया गया था, लेकिन कुछ ग्लिच के साथ जो अगले संस्करण तक तय नहीं हुए थे।) सामान्य नक्शा कार्यान्वयन को बुलाया जाता है जेनिक्स, जेनिक्स में। चयन इकाई। –

उत्तर

10

आपकी सटीक आवश्यकताओं के आधार पर, आप TStringList ऑब्जेक्ट का उपयोग करना चाहेंगे।

+0

मैं सिर्फ एक स्ट्रिंग को दूसरी स्ट्रिंग में मैप करने के लिए देख रहा हूं: map.put ("सेब", "गोल दिखने वाला फल"); map.get ("सेब"); // रिटर्न "राउंड लुकिंग फलों" – LoudNPossiblyWrong

+4

टीस्ट्रिंगलिस्ट यह कर सकती है: 'MyStringlist.Values ​​[' apple '] का उपयोग करें: =' राउंड लुकिंग फलों '; 'असाइन करने के लिए और' एस: = MyStringlist.Values ​​[' apple ']; ' – mjn

+0

+1 पढ़ने के लिए TStringList सॉर्ट किए जाने के बाद लुक-अप के लिए बाइनरी खोज का उपयोग करता है। –

4

Jedi Code Library में कुछ उन्नत कंटेनर कक्षाएं हैं। इंटरफेस, JclContainerIntf.pas घोषित किये गए हैं, उदाहरण के लिए:

IJclMap = interface(IJclContainer) 
    ['{A7D0A882-6952-496D-A258-23D47DDCCBC4}'] 
    procedure Clear; 
    function ContainsKey(Key: TObject): Boolean; 
    function ContainsValue(Value: TObject): Boolean; 
    function Extract(Key: TObject): TObject; 
    function GetValue(Key: TObject): TObject; 
    function IsEmpty: Boolean; 
    function KeyOfValue(Value: TObject): TObject; 
    function KeySet: IJclSet; 
    function MapEquals(const AMap: IJclMap): Boolean; 
    procedure PutAll(const AMap: IJclMap); 
    procedure PutValue(Key, Value: TObject); 
    function Remove(Key: TObject): TObject; 
    function Size: Integer; 
    function Values: IJclCollection; 
    property Items[Key: TObject]: TObject read GetValue write PutValue; 
     {$IFNDEF BUGGY_DEFAULT_INDEXED_PROP} default; {$ENDIF ~BUGGY_DEFAULT_INDEXED_PROP} 
    end; 
+0

क्या आप जानते हैं कि कोई मूल पुस्तकालय है जिसका उपयोग मैं कर सकता हूं? मैं परियोजना में एक और पुस्तकालय जोड़ने से बचने की कोशिश कर रहा हूं। – LoudNPossiblyWrong

+2

जावा की तुलना में, कोर रन टाइम लाइब्रेरी डेल्फी में काफी छोटी है। वस्तुओं के लिए कुछ उच्च स्तरीय कंटेनर कक्षाएं हैं (जैसे टोबजेक्टलिस्ट और टीइंटरफेसलिस्ट) लेकिन बहुत कुछ नहीं। – mjn

5

मैं TStringList परीक्षण किया है और कुछ THashTable कार्यान्वयन और दो कार्यान्वयन के बीच मतभेदों को कम से कम कर रहे हैं, और ज्यादातर मामलों TStringList (dicotomical तरह कार्यान्वयन के साथ) में अधिक कुशल हैं THashTable से।
मूल्यों की एक छोटी संख्या के लिए TStringList हैश से तेज़ है, और बड़ी संख्या में मूल्यों के लिए आपको टकराव को कम करने के लिए एक जटिल हैश-फ़ंक्शन मिलना चाहिए, और यह जटिलता हैशलिस्ट की दक्षता को कम करती है।

आपको ऑब्जेक्ट स्ट्रिंगलिस्ट के सूचक का उपयोग करने के लिए आवश्यक सभी जानकारी संग्रहीत करने के लिए (दूसरी स्ट्रिंग) का उपयोग करना होगा।

सम्मान।

+0

धन्यवाद मेसन। ;-) –

7

मैं एक पुस्तकालय सियारन McCreesh से Hashes.pas कहा जाता इस्तेमाल किया लेकिन जब से अपनी वेबसाइट अब उपलब्ध नहीं है तो आप निम्न URL से एक पीए फ़ाइल देख सकते हैं:

Link to Cian McCreesh - Hashes.pas

तुम भी पा सकते हैं यह पाठ के साथ गूगल के साथ: "सियान McCreesh हैश"

इस पुस्तकालय आप निम्न कर सकते हैं:

aString := TStringHash.Create; 
aString['color'] := 'blue'; 
ShowMessage(aString.Items['color']); // blue 

हे आर ऑब्जेक्ट्स:

aObj := TObjectHash.Create; 
aObj['color'] := TBlueClass.Create; 
bcBlue:=(aObj.Items['color'] as TBlueClass); 
ShowMessage(bcBlue.Name); // Blue (supposing the TBLusClass as a Name property... 

आशा है कि यह आपको और साथ ही मेरे लिए भी सेवा प्रदान करेगी।

पीएस मुझे लगता है कि एरेस ऑडियोगैक्सी परियोजना भी इसका उपयोग करती है।

+1

मैंने इसे Google कैश से यहां कॉपी किया है: http://pastebin.com/HkWAGFbe। उम्मीद है कि सीरान दिमाग में नहीं होगा। –

संबंधित मुद्दे