2013-03-06 6 views
24

मैं जैसे एक सरणी है के रूप में कुंजी के रूप में मूल्य के साथ शब्दकोश में एक सरणी में कनवर्ट करें कुंजी और शब्दकोश मान इंडेक्स होंगे, ताकि मैं O(1) में अपना नाम पूछकर कॉलम की अनुक्रमणिका प्राप्त कर सकूं। मुझे पता है कि यह काफी सरल होना चाहिए, लेकिन मैं इसके चारों ओर अपना सिर नहीं प्राप्त कर सकता।आइटम के सूचकांक और स्वयं आइटम

मैंने कोशिश की -

Dictionary<string, int> myDict = arr.ToDictionary(x => x, x => indexOf(x)) 

हालांकि, इस रिटर्न -

{(Name, 0), (Address, 0), (Phone, 0),...} 

मैं जानता हूँ कि ऐसा होता है, क्योंकि यह पहला मामला के सूचकांक भंडारण है, लेकिन यह है कि मैं क्या करने के लिए देख रहा हूँ नहीं है कर।

+1

क्षमा करें, लेकिन आप किसी भी तरह से है कि क्यों की आवश्यकता होगी? – Vogel612

उत्तर

53

आप जो अनुक्रमणिका है, Select के अधिभार का उपयोग कर सकते हैं:

var dictionary = array.Select((value, index) => new { value, index }) 
         .ToDictionary(pair => pair.value, pair => pair.index); 

या Enumerable.Range का उपयोग करें: यदि आप दो बराबर चाबियाँ प्रदान करने की कोशिश

var dictionary = Enumerable.Range(0, array.Length).ToDictionary(x => array[x]); 

ध्यान दें कि ToDictionary एक अपवाद फेंक देते हैं। आपको अपने सरणी की दो समान मान रखने की संभावना के बारे में सावधानी से सोचना चाहिए, और आप उस स्थिति में क्या करना चाहते हैं।

मैं सिर्फ मैन्युअल रूप से हालांकि यह करने के लिए परीक्षा होगी जा:

var dictionary = new Dictionary<string, int>(); 
for (int i = 0; i < array.Length; i++) 
{ 
    dictionary[array[i]] = i; 
} 
+1

@ एसएल: ओह, तय। –

+2

यह ध्यान देने योग्य है कि डुप्लिकेट मान होने पर पहले दो त्रुटिपूर्ण होंगे। वे पहले 'डिस्टिंट' जोड़ना चाहते हैं। – Servy

+0

@ सर्वी: मैं एक नोट जोड़ूंगा, लेकिन "आपको इस पर विचार करने की आवश्यकता" के अलावा सुझाए गए समाधान के बिना :) –

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