2010-10-06 47 views
88

một đơn giản để bắt đầu một ngày, cho một Dictionary<string, string> như sau:Chuyển đổi Dictionary <string, string> để dấu chấm phẩy chuỗi tách ra trong C#

var myDict = new Dictionary<string, string>(); 
myDict["A"] = "1"; 
myDict["B"] = "2"; 
myDict["C"] = "3"; 
myDict["D"] = "4"; 

tôi muốn tạo một chuỗi: "A=1;B=2;C=3;D=4"

Một ví dụ triển khai:

var myStringBuilder = new StringBuilder(); 
bool first = true; 
foreach (KeyValuePair<string, string> pair in myDict) 
{ 
    if (first) 
    { 
     first = false; 
    } 
    else 
    { 
     myStringBuilder.Append(";"); 
    } 

    myStringBuilder.AppendFormat("{0}={1}", pair.Key, pair.Value); 
} 

var myDesiredOutput = myStringBuilder.ToString(); 

Lưu ý từ điển có thể có ít hơn 10 mục cho thấy rằng StringBuilder quá mức cần thiết.

Triển khai thay thế nào ngắn gọn hơn/hiệu quả hơn? Khung làm việc có bất kỳ tính năng nào sẽ giúp ích không?

Trả lời

189
string s = string.Join(";", myDict.Select(x => x.Key + "=" + x.Value).ToArray()); 

(Và nếu bạn đang sử dụng .NET 4, hoặc mới hơn, sau đó bạn có thể bỏ qua trận chung kết ToArray gọi.)

+1

Tốt và đơn giản - cảm ơn! – Iain

+0

Nice :-) Tuy nhiên, tôi muốn sử dụng String.Format ("{0} = {1}", x.Key, x.Value) thay vì toán tử + –

+0

Chỉnh sửa theo nhận xét. –

25

Một lựa chọn khác là sử dụng phần mở rộng tổng hợp chứ không phải là tham:

String s = myDict.Select(x => x.Key + "=" + x.Value).Aggregate((s1, s2) => s1 + ";" + s2); 
+0

phong cách linq hoàn hảo! – menkow

Các vấn đề liên quan