2012-03-29 12 views
10

मुझे हैशटेबल को एक शब्दकोश में कनवर्ट करने के तरीके के बारे में कई प्रश्न/उत्तर दिखाई देते हैं, लेकिन मैं एक शब्दकोश को हैशटेबल में कैसे परिवर्तित कर सकता हूं?शब्दकोश को परिवर्तित करने के लिए कैसे करें <> से हैशटेबल सी # में?

+1

और आपको इसकी आवश्यकता क्यों होगी? एक हैशटेबल बहुत विशिष्ट है कि कुंजी पर गणना की गई मान मान के स्थान का उत्पादन करती है ... और एक शब्दकोश केवल एक सीधी (कुंजी, मान) संग्रह होता है। आप एक शब्दकोश को एक हैशटेबल में क्यों बदलना चाहते हैं? –

+0

सबसे सरल स्तर पर, मैं आलसी हूं। ऑब्जेक्ट जो 'हैशटेबल' प्रकार है, कई जगहों पर उपयोग किया जाता है। – jpints14

+0

अपने आप में इसका उपयोग करने का कोई कारण नहीं है। शब्दकोश और हैशटेबल्स अलग-अलग परिस्थितियों में उपयोग किए जाने वाले विभिन्न जानवर हैं। आप जानते हैं, एक सूची भी कई जगहों पर उपयोग की जाती है ... तो इसका उपयोग क्यों नहीं करें? : -एस –

उत्तर

23

सबसे आसान तरीका उपयोग कर रहा है:

 var dictionary = new Dictionary<object, object>(); 
     //... fill the dictionary 
     var hashtable = new Hashtable(dictionary); 
4

क्या करना चाहते करने के लिए बहुत दुर्लभ लगता है, लेकिन सबसे सरल है:

var hash = new Hashtable(); 
foreach(var pair in dictionary) { 
    hash.Add(pair.Key,pair.Value); 
} 

(यह मानते हुए कि कोई असामान्य 'औजार टाइप किया समानता की जांच नहीं बल्कि untyped समानता जाँच "आदि)

+1

अब इसे 'ToHashTable' एक्सटेंशन विधि और voila में शामिल करें! – Dismissile

+1

यहां तक ​​कि एक [कन्स्ट्रक्टर] (http://msdn.microsoft.com/en-us/library/kdkta2sx.aspx) है जो वही काम करता है। – Joey

+0

यही वह है जो मैं करने के बारे में सोच रहा था। यह सोच रहा था कि ऐसा करने का कोई स्पष्ट तरीका नहीं था। हालांकि, धन्यवाद! – jpints14

8
Dictionary<int, string> dictionary = new Dictionary<int, string> 
    { 
     {1,"One"}, 
     {2,"Two"} 
    }; 
Hashtable hashtable = new Hashtable(dictionary); 

इस प्रयास करें Hashtable के निर्माता

3

आप Hashtable निर्माता अधिभार है कि एक IEqualityComparer पैरामीटर लेता उपयोग करने पर विचार करना चाह सकते हैं:

var hashtable = new Hashtable(dictionary, (IEqualityComparer) dictionary.Comparer); 

इस तरह, अपने Hashtable शब्दकोश के रूप में ही Comparer उपयोग करता है। उदाहरण के लिए, यदि आपका शब्दकोश एक केस-असंवेदनशील स्ट्रिंग कुंजी का उपयोग करता है, तो हो सकता है कि आप अपने Hashtable को केस-असंवेदनशील भी हो। उदा .:

var d = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); 
d.Add("a", "a"); 
d.Add("b", "b"); 

bool found; 
found = d.ContainsKey("A"); // true 

var hashtable1 = new Hashtable(d); 
var hashtable2 = new Hashtable(d, (IEqualityComparer) d.Comparer); 

found = hashtable1["A"] != null; // false - by default it's case-sensitive 

found = hashtable2["A"] != null; // true - uses same comparer as the original dictionary 
संबंधित मुद्दे