सरणी में शब्दकोश मूल्यों को परिवर्तित करें


82

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

उदाहरण के लिए, अगर मेरे पास एक Dictionaryजगह Keyहै Stringऔर Valueहै Foo, तो मैं प्राप्त करना चाहता हूंFoo[]

मैं वीएस 2005, सी # 2.0 का उपयोग कर रहा हूं

जवाबों:


125
// 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();

क्या एक्सटेंशन .ToArray <Foo> () कोई बेहतर प्रदर्शन करता है?
गोरान

लेकिन हम कैसे जानते हैं कि यह सबसे कुशल है?
टॉम कार्टर

2
@ मैं आमतौर पर यह देखता हूं कि ढांचे में निर्मित कोई भी चीज (जैसे .CopyTo () या .ToArray ()) इसे करने का सबसे कारगर तरीका है। Microsoft मुझसे ज्यादा स्मार्ट हैं। :)
मैट हैमिल्टन

5
ToArray CopyTo की तुलना में कम प्रदर्शनकारी है (यह आंतरिक इंटरमीडिएट प्रतिनिधित्व के लिए CopyTo का उपयोग करता है, और फिर इसे वापस करने के लिए फिर से कॉपी करता है)। हालाँकि, जैसा कि सभी सूक्ष्म-प्रदर्शन से संबंधित मामलों में पठनीयता, मजबूती और स्थिरता के लिए होता है और यदि यह एक मुद्दा है तो प्रदर्शन को मापता है।
आईसीआर

16
ToArray () LINQ में एक एक्सटेंशन विधि है, इसलिए आपको जोड़ने की आवश्यकता हैusing System.Linq;
क्रिश्चियन डेवन

12

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

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

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

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

6

मान पर एक ToArray () फ़ंक्शन है:

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

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

IEnumerable<Foo> foos = dict.Values;

4

यदि आप linq का उपयोग करना चाहते हैं, तो आप निम्नलिखित प्रयास कर सकते हैं:

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

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


2
dict.Values.ToArray()एक ही बात करता है, लेकिन एक प्रतिनिधि के माध्यम से प्रत्येक मूल्य के उपरि के बिना।
लांस यू मैथ्यू

1

इन दिनों, आपके पास LINQ उपलब्ध होने के बाद, आप शब्दकोश कीज़ और उनके मानों को एक स्ट्रिंग में बदल सकते हैं।

आप निम्नलिखित कोड का उपयोग कर सकते हैं:

// convert the dictionary to an array of strings
string[] strArray = dict.Select(x => ("Key: " + x.Key + ", Value: " + x.Value)).ToArray();

// convert a string array to a single string
string result = String.Join(", ", strArray);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.