2011-11-03 82 views

回答

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;百萬; 10,000,000)在你的三項詞典和我的筆記本電腦上,後者的平均速度提高了39%。在一個有10個元素的詞典中,後者只有大約22%的速度。

其他有一點要注意,簡單的字符串連接在我的第一個例子是比mccow002's answerstring.Format()變化快約38%,因爲我懷疑它扔在一個小的字符串生成器來代替級聯,給出幾乎相同的性能指標。

要重新從結果字符串原來的字典,你可以做這樣的事情:

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)) 
相關問題