2012-12-07 15 views
6

यदि आप php के साथ काम करते हैं तो आप प्रोग्रामिंग लैंग में php को एसोसिएटिव सरणी (या सरणी चौड़ाई स्ट्रिंग कुंजी) देख सकते हैं। उदाहरण के लिए:डेल्फी में एसोसिएटिव सरणी, स्ट्रिंग कुंजी के साथ सरणी संभव है?

$server['hostname'] = 'localhost'; 
$server['database'] = 'test'; 
$server['username'] = 'root'; 
$server['password'] = 'password' ;  

// 2d array 
$all['myserver']['hostname'] = 'localhost' ; 

लेकिन डेल्फी में साहचर्य सरणी का उपयोग करने के किसी भी डिफ़ॉल्ट रास्ता नहीं मिल रहा।

सबसे पहले मैं किसी आउटपुट घटक या कक्षा के साथ डिफ़ॉल्ट तरीका ढूंढना चाहता हूं। दूसरा अगर वास्तव में मैं आंतरिक तरीके से नहीं ढूंढ पाता हूं तो मैं केवल आउटपुट कक्षाओं को चुनता हूं।

मैं डेल्फी एक्सई 3 का उपयोग करता हूं, आपकी मदद के लिए बहुत धन्यवाद।

संपादित करें: मुझे यहां एक वर्ग मिला: http://www.delphipages.com/forum/showthread.php?t=26334 PHP के समान ही, लेकिन कोई बेहतर तरीका?

+2

एक बहुत अच्छा कार्यान्वयन यहां पाया जा सकता: http://stackoverflow.com/a/15854846/1022219। यह PHP के Assoc Array –

+0

@iPath के निकटतम मिलान है: धन्यवाद के साथ सहमत हैं:) –

उत्तर

8

आप इस उद्देश्य के लिए tStrings और TStringList उपयोग कर सकते हैं, लेकिन 2 डी सरणियों इन घटकों के दायरे से बाहर हैं।

उपयोग;

uses StrUtils; 

... 

const const_TypesChar : array [0..4] of String = 
    (
     'I', 
     'F', 
     'D', 
     'S', 
     'B' 
    ); 
const const_TypesStr : array [0..4] of String = 
    (
     'Integer', 
     'Float', 
     'Datetime', 
     'String', 
     'Boolean' 
    ); 

... 

Value := const_TypesStr[ AnsiIndexStr('S', const_TypesChar) ]; 

// As an example, after execution of this code Value variable will have 'String' value. 

// 

तो कार्यक्रम में हम दो सरणियों const_TypesStr एक साहचर्य सरणी के रूप में साथ AnsiIndexStr समारोह का उपयोग कर रहे const_TypesChar और :

var 
    names : TStrings; 
begin 
    ... 
    names := TStringList.Create; 
    ... 
    ... 
    names.values['ABC'] = 'VALUE of ABC' ; 
    ... 
    ... 
end ; 
+1

होना चाहिए: = (असाइनमेंट ऑपरेटर) नहीं = जो दो मान/वस्तुओं की तुलना करता है –

15

आप Generics.Collections इकाई से TDictionary<string,string> उपयोग कर सकते हैं।

var 
    Dict: TDictionary<string,string>; 
    myValue: string; 
.... 
Dict := TDictionary<string,string>.Create; 
try 
    Dict.Add('hostname', 'localhost'); 
    Dict.Add('database', 'test'); 
    //etc. 
    myValue := Dict['hostname']; 
finally 
    Dict.Free; 
end; 

और इसी तरह से।

आप एक शब्दकोश है कि एक शब्दकोश में शामिल है चाहते हैं, आप TDictionary<string, TDictionary<string,string>> का उपयोग कर सकते हैं।

हालांकि, जब आप यह है कि आप शब्दकोश आइटम है कि बाहरी शब्दकोश में निहित हैं के जीवनकाल में विशेष देखभाल की आवश्यकता होगी है। आप इसे प्रबंधित करने में सहायता के लिए TObjectDictionary<K,V> का उपयोग कर सकते हैं। आप इस तरह इन वस्तुओं में से एक बना सकते हैं:

TObjectDictionary<string, TDictionary<string,string>>.Create([doOwnsValues]); 

यह TObjectDictionary<k,V> संचालित एक ही True करने के लिए OwnsObjects सेट के साथ एक पारंपरिक TObjectList के रूप में किया गया था।

+0

यहां कोई बेहतर तरीका नहीं है जो मैंने यहां बेहतर पाया: http://www.delphipages.com/forum/showthread.php?t=26334, लेकिन मुझे पूरा वर्ग चाहिए, लेकिन डेविड धन्यवाद :) –

+2

मुझे उस टिप्पणी को समझ में नहीं आता है। जो आप खोज रहे हैं वह मेरे उत्तर में वर्णित कक्षाएं हैं। –

+1

tDictionary को नए डेल्फी संस्करणों में पेश किया गया था। यह समाधान टीएसट्रिंग्स के साथ दिए गए एक से कहीं बेहतर है।क्योंकि tDictionary के कार्यान्वयन tStrings से बेहतर है। –

0

मैं समस्या यह है कि सरल तरीका (उदाहरण) हल था ।

प्लस कि यह आसान है और हम जब हम अपने सरणियों के लिए तत्वों को जोड़ने के कोड विभिन्न स्थानों में कार्यक्रम में हर बार बदलने की जरूरत नहीं है। डेल्फी में साहचर्य सरणी के

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