2008-10-13 18 views
63

किसी शब्दकोश के मानों की सूची को सरणी में बदलने का सबसे प्रभावी तरीका क्या है?शब्दकोश मानों को सरणी में बदलें

उदाहरण के लिए

, अगर मैं एक Dictionary जहां KeyString और ValueFoo है, मैं Foo[]

मैं 2005 का उपयोग कर रहा, सी # 2,0

उत्तर

97
// dict is Dictionary<string, Foo> 

Foo[] foos = new Foo[dict.Count]; 
dict.Values.CopyTo(foos, 0); 

// or in C# 3.0: 
var foos = dict.Values.ToArray(); 
+0

एक्सटेंशन क्या है। ToArray () कोई बेहतर प्रदर्शन करते हैं? – Goran

+0

लेकिन हम कैसे जानते हैं कि यह सबसे कुशल है? –

+0

मैं नहीं देख सकता कि कैसे ToArray() सीधे प्रतिलिपि से तेज हो सकता है - जो कि कम से कम प्रतीत होता है। –

4

वहाँ एक toArray प्राप्त करने के लिए (चाहते हैं) मानों पर कार्य:

Foo[] arr = new Foo[dict.Count];  
dict.Values.CopyTo(arr, 0); 

लेकिन मुझे नहीं लगता कि इसकी effici ent (मैंने वास्तव में कोशिश नहीं की है, लेकिन मुझे लगता है कि यह इन सभी मानों को सरणी में प्रतिलिपि बनाता है)। क्या आपको वास्तव में एक ऐरे की आवश्यकता है? यदि नहीं, तो मैं IENumerable पास करने का प्रयास करूंगा:

IEnumerable<Foo> foos = dict.Values; 
11

इसे एक सूची में स्टोर करें। यह आसान है;

List<Foo> arr = new List<Foo>(dict.Values); 

बेशक यदि आप विशेष रूप से इसे किसी सरणी में चाहते हैं;

Foo[] arr = (new List<Foo>(dict.Values)).ToArray(); 
4

आप, LINQ उपयोग करें ताकि आप यह कर सकते करना चाहते हैं:

Dictionary<string, object> dict = new Dictionary<string, object>(); 
var arr = dict.Select(z => z.Value).ToArray(); 

मैं जो एक तेजी से या बेहतर है पता नहीं है। दोनों मेरे लिए काम करते हैं।

+2

'dict.Values.ToArray()' एक ही चीज़ करता है, लेकिन एक प्रतिनिधि के माध्यम से प्रत्येक मान को भौतिक बनाने के उपर के बिना। – BACON

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