繁体   English   中英

将字典的字典转换为字符串

[英]converting a dictionary of dictionary to string

我有字典词典:

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

我试图通过覆盖to字符串方法来输出其内容,但我不知道如何将其转换为字符串。

我试过了:

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

这没有用

您的版本尝试打印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而不是字符串插值 如果使用的是较新版本的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()
));

考虑使用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));

输出:

{“测试”:{“ a”:“苹果”,“ b”:“香蕉”,“ c”:“猫”},“灯”:{“ c”:“紧凑型荧光灯”,“ l”:“发光二极管“,” i“:”白炽灯“}}

试试这个:

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(",");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM