2011-02-16 13 views
8

ग्रीटिंग्स गुरु, मेरा उद्देश्य सूची का एक शब्दकोश बनाना है, क्या एक सरल तकनीक मौजूद है?एक शब्दकोश को पॉप्युलेट करने का आसान तरीका <स्ट्रिंग, सूची <string>>

मैं सूची (टी) को आईन्यूमेरेबल (टी) में पसंद करता हूं, इसलिए मैंने Ilookup या IGrouping पर सूची का शब्दकोश चुना है।

कोड काम करता है लेकिन यह चीजों को करने का एक गन्दा तरीका लगता है।

string[] files = Directory.GetFiles (@"C:\test"); 

Dictionary<string,List<string>> DataX = new Dictionary<string,List<string>>(); 

foreach (var group in files.GroupBy (file => Path.GetExtension (file))) 
{ 
    DataX.Add (group.Key, group.ToList()); 
} 
+0

यह नहीं करना चाहिए प्रश्न http://codereview.stackexchange.com/ पर हो? – servermanfail

+2

मैं इसके साथ कुछ भी गलत नहीं देख सकता। आपको लगता है कि यह * गन्दा * है? –

+0

@ क्लोस: मैंने सोचा कि वह बल्कि खराब भी था, लेकिन लिंक कार्यान्वयन बहुत साफ दिखता है। @ ज़ीऑन: आपको लगता है कि एफ # को आज़माने के लिए सही मानसिकता है, यह सब साफ होने के बारे में है। – gjvdkamp

उत्तर

12

LINQ में यह सब करने के लिए आप ToDictionary() उपयोग कर सकते हैं:

string[] files = Directory.GetFiles (@"C:\test"); 
var DataX = files.GroupBy (file => Path.GetExtension (file)) 
       .ToDictionary(g => g.Key, g => g.ToList()); 

या क्लाउस बाहर नीचे अंक के रूप में आप एक ही बार में सब कर सकते हैं:

var DataX = Directory.GetFiles (@"C:\test") 
       .GroupBy (file => Path.GetExtension (file)) 
       .ToDictionary(g => g.Key, g => g.ToList()); 
+0

+1 एक ही चीज़ पोस्ट करने के लिए तैयार हो रहा था। – diceguyd30

+0

+1, जब आप इसमें हों तो 'फ़ाइलों' की घोषणा को क्यों न हटाएं। –

+0

@ क्लोस ट्रू, धन्यवाद - संपादित किया गया। मैं सबकुछ नीचे संपीड़ित करने का बड़ा प्रशंसक नहीं हूं क्योंकि इससे कदम उठाना और डीबग करना मुश्किल हो जाता है (और इसे भी कम पठनीय बना सकता है) लेकिन मुझे कोई समस्या नहीं दिखाई दे रही है वह यहाँ कर रहा हूँ। – Rup

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