2011-11-03 14 views
19

मैं कुंजी मान जोड़े के शब्दकोश को एक स्ट्रिंग में कैसे परिवर्तित करूं? क्या आप LINQ समेकन का उपयोग करके ऐसा कर सकते हैं? मैंने स्ट्रिंग्स की सूची का उपयोग करके ऐसा करने के उदाहरण देखे हैं, लेकिन एक शब्दकोश नहीं।शब्दकोश को स्ट्रिंग करने के लिए सबसे अच्छा तरीका <स्ट्रिंग, स्ट्रिंग> एकल समेकित स्ट्रिंग प्रतिनिधित्व में?

इनपुट:

Dictionary<string, string> map = new Dictionary<string, string> { 
      {"A", "Alpha"}, 
      {"B", "Beta"}, 
      {"G", "Gamma"} 
}; 

आउटपुट:

string result = "A:Alpha, B:Beta, G:Gamma"; 

उत्तर

42

यह सबसे संक्षिप्त तरीके से मैं के बारे में सोच सकता है:

var result = string.Join(", ", map.Select(m => m.Key + ":" + m.Value).ToArray()); 

हालांकि, अपने परिस्थितियों के आधार पर , यह हो सकता हे तेजी से (हालांकि बहुत सुंदर नहीं):

var result = map.Aggregate(new StringBuilder(), 
    (a, b) => a.Append(", ").Append(b.Key).Append(":").Append(b.Value), 
    (a) => a.Remove(0, 2).ToString()); 

मैं पुनरावृत्तियों की एक अलग संख्या (10,000 से ऊपर के प्रत्येक भाग गया; 1000000; 10,000,000) आपके तीन-आइटम शब्दकोश और मेरे लैपटॉप पर, उत्तरार्द्ध औसतन 39% तेज था। 10 तत्वों के साथ एक शब्दकोश पर, उत्तरार्द्ध केवल 22% तेज था।

मेरा पहला उदाहरण में नोट करने के लिए, सरल स्ट्रिंग संयोजन एक अन्य बात यह है कि 38% mccow002's answer में string.Format() भिन्नता की तुलना में तेजी थी, के रूप में मुझे लगता है यह संयोजन के स्थान पर एक छोटे स्ट्रिंग बिल्डर में फेंक रहा है, लगभग समान प्रदर्शन को देखते हुए मैट्रिक्स।

परिणाम स्ट्रिंग से मूल शब्दकोश बनाने के लिए, आप कुछ इस तरह कर सकता है:

var map = result.Split(',') 
    .Select(p => p.Trim().Split(':')) 
    .ToDictionary(p => p[0], p => p[1]); 
+0

Didn ' मैंने पोस्ट करने से पहले तुम्हारा नहीं देखा। शानदार सोच के लिए +1 :) – mccow002

+1

@CoryLarson आह, ठंडा। टिप्पणी: वापस ले लिया। – dlev

+0

मैं इन var परिणाम से मूल शब्दकोश में वापस कैसे जा सकता हूं? – zipi

8
string result = string.Join(", ", map.Select(x => string.Format("{0}:{1}", x.Key, x.Value)).ToArray()) 
3

इस का उपयोग करता है LINQ Aggregate method:

map 
.Select(m => $"{m.Key}:{m.Value}") 
.Aggregate((m1, m2) => $"{m1}, {m2}"); 

ही लेकिन string.Format() साथ:

map 
.Select(m => string.Format("{0}:{1}", m.Key, m.Value)) 
.Aggregate((m1, m2) => string.Format("{0}, {1}", m1, m2)) 
संबंधित मुद्दे