2017-10-15 108 views
0

我有詞典的詞典:轉換詞典的詞典串

Dictionary<string, Dictionary<char, string>> myDict; 

我被重寫串方法試圖輸出它的內容,但我不能弄清楚如何將其轉換爲字符串。

我想:

StringBuilder str = new StringBuilder(); 
foreach (Dictionary<string, Dictionary<char, string>> s in str) 
{ 
    myDict.Append(s.Keys).Append(",").Append(s.Values); 
} 

這並不工作

+0

考慮stringTransition沒有定義我懷疑它不工作 – Paparazzi

回答

0

試試這個:

StringBuilder str = new StringBuilder(); 
foreach (var s in myDict) 
{ 
    foreach (var i in s.Value) 
    { 
     //Key is char, Value is string 
     str.Append("(") 
      .Append(s.Key) 
      .Append(",") 
      .Append(i.Key) 
      .Append(",") 
      .Append(i.Value) 
      .Append("),"); 
    } 
} 
//remove trailing "," 
var s = str.ToString().Trim(","); 
+0

這一個是給我在內部foreach循環中's'出錯 –

+0

哎呀...從我的頭頂上做這個...按住 – Stefan

+0

@ TSB_1020:固定.... – Stefan

3

你的版本嘗試打印s.Keyss.Values,這兩者都是集合。您可以使用一個循環打印出來,但你可以使用string.Join兩次來代替:

public override string ToString() { 
    return string.Join(
     ",", 
     myDict.Select(
      p => string.Format(
       "{0}:{1}", 
       p.Key, 
       string.Join(",", p.Value.Select(x => string.Format("{0}={1}", x.Key, x.Value))) 
     ) 
    ); 
} 

注1:上述語法使用string.Format,而不是string interpolation,在這兩個電話。如果您使用的是C#的新版本,你可以把它改寫爲稍短的代碼,例如

string.Join(",", p.Value.Select(x => $"{x.Key}={x.Value}")) 

注2:對於舊版本的.NET的加入ToArray()都選擇後:

return string.Join(
    ",", 
    myDict.Select(
     p => string.Format(
      "{0}:{1}", 
      p.Key, 
      string.Join(",", p.Value.Select(x => string.Format("{0}={1}", x.Key, x.Value)).ToArray()) 
    ).ToArray() 
)); 
+0

它給我一個錯誤的p.Value.Select(...) –

+0

@ TSB_1020你是否在C#文件的頂部導入了'System.Linq'? – dasblinkenlight

+0

是的,我做到了。錯誤消息說:不能從'System.Collections.Generic.IEnumerable '轉換爲'string []' –

1

考慮使用Newtonsoft.Json,它支持將字典序列化爲字符串。

var values = new Dictionary<string, IDictionary<char, string>> 
{ 
    { 
     "test", new Dictionary<char, string> 
     { 
      ['a'] = "apple", 
      ['b'] = "banana", 
      ['c'] = "cat" 
     } 
    }, 
    { 
     "lights", new Dictionary<char, string> 
     { 
      ['c'] = "compact fluorescent", 
      ['l'] = "light emitting diode", 
      ['i'] = "incandescent" 
     } 
    } 
}; 

Console.WriteLine(JsonConvert.SerializeObject(values)); 

輸出:

{ 「測試」:{ 「一個」: 「蘋果」, 「B」: 「香蕉」, 「C」: 「貓」}, 「燈」: {「C」:「緊湊型熒光燈」,「L」:「發光二極管」,「I」:「白熾燈」}}

+0

Owww ... .nice輸出。 – Stefan