2017-10-15 99 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