C# 要转换为字典的字符串数据

C# 要转换为字典的字符串数据,c#,C#,我有一根绳子 string data = "[City, Delhi]&[State, DL]&[Country, IN]"; 我想要一本字典 我想的方法是 分开& 在生成的数组中,解析每个元素 2.1替换[和] 2.2插入词典 我讨厌这种方法,因为我的字符串已经有了[and],我应该可以直接将它添加到字典中。您描述的方法可能是最好的 没有错误处理的简单实现是: var pairs = data.Split('&'); var dict = new Dictionar

我有一根绳子

string data = "[City, Delhi]&[State, DL]&[Country, IN]";
我想要一本字典

我想的方法是

分开& 在生成的数组中,解析每个元素 2.1替换[和] 2.2插入词典
我讨厌这种方法,因为我的字符串已经有了[and],我应该可以直接将它添加到字典中。

您描述的方法可能是最好的

没有错误处理的简单实现是:

var pairs = data.Split('&');

var dict = new Dictionary<string, string>();

foreach (var pair in pairs)
{
    var parts = pair.Split(',');

    dict.Add(
        parts[0].TrimStart('['),
        parts[1].TrimStart().TrimEnd(']'));
}
或者,使用正则表达式获取键和值:

string data = "[City, Delhi]&[State, DL]&[Country, IN]";

var pairs = data.Split('&');

var dict = new Dictionary<string, string>();

var regex = new System.Text.RegularExpressions.Regex(@"\[(?<key>.*), (?<value>.*)\]");

foreach (var pair in pairs)
{
    var match = regex.Match(pair);

    // TODO: Error if match.Success == false ?

    dict.Add(match.Groups["key"].Value, match.Groups["value"].Value);
}

您所描述的方法可能与它将得到的方法一样好

没有错误处理的简单实现是:

var pairs = data.Split('&');

var dict = new Dictionary<string, string>();

foreach (var pair in pairs)
{
    var parts = pair.Split(',');

    dict.Add(
        parts[0].TrimStart('['),
        parts[1].TrimStart().TrimEnd(']'));
}
或者,使用正则表达式获取键和值:

string data = "[City, Delhi]&[State, DL]&[Country, IN]";

var pairs = data.Split('&');

var dict = new Dictionary<string, string>();

var regex = new System.Text.RegularExpressions.Regex(@"\[(?<key>.*), (?<value>.*)\]");

foreach (var pair in pairs)
{
    var match = regex.Match(pair);

    // TODO: Error if match.Success == false ?

    dict.Add(match.Groups["key"].Value, match.Groups["value"].Value);
}

这是正则表达式的一个很好的用例

var d = Regex.Matches(data, @"\[(?<k>[^,]+), (?<v>[^]]+)\]")
    .OfType<Match>()
    .ToDictionary(m => m.Groups["k"].Value, m => m.Groups["v"].Value);

这是正则表达式的一个很好的用例

var d = Regex.Matches(data, @"\[(?<k>[^,]+), (?<v>[^]]+)\]")
    .OfType<Match>()
    .ToDictionary(m => m.Groups["k"].Value, m => m.Groups["v"].Value);
您可以使用linq来尝试这一点

您可以使用linq来尝试这一点

试试这个

 private static void Splitter()
    {
        string data = "[City, Delhi]&[State, DL]&[Country, IN]";
        Dictionary<string,string> dOutput = new Dictionary<string,string>();
        string[] sArr = data.Split('&');

        var v = from p in sArr
                select p.Replace("[", "").Replace("]", "").Split(',');

         var v2 = (from p in v
                 select p).ToDictionary(item => item[0], item => item[1]);


        Console.WriteLine(v2.Count());

    }
v2是一个字典对象

试试这个

 private static void Splitter()
    {
        string data = "[City, Delhi]&[State, DL]&[Country, IN]";
        Dictionary<string,string> dOutput = new Dictionary<string,string>();
        string[] sArr = data.Split('&');

        var v = from p in sArr
                select p.Replace("[", "").Replace("]", "").Split(',');

         var v2 = (from p in v
                 select p).ToDictionary(item => item[0], item => item[1]);


        Console.WriteLine(v2.Count());

    }


v2是一个字典对象

您所说的应该能够直接添加到字典中是什么意思?当我查看字典中的元素时,我看到它们的格式是[key,value]。我希望能够创建一个包含以下数据的字典:[City,Delhi],[State,DL],[Country,IN],从这个字符串中可以直接添加到字典中是什么意思?当我查看字典中的元素时,我看到它们的格式是[key,value]。“我希望能用这条字符串中的数据[德里市],[德里州],[国家],创建一本词典。谢谢你的回答,@Richard。但是,我的目标不是我所描述的可能的方法。我们不能做一些不替换字符的事情吗?用一个部分使用正则表达式的替代方法更新了我的答案。谢谢Richard。我倾向于迈克的回答。但如果正则表达式不匹配,您的答案确实提供了更大的灵活性。我想知道迈克的回答中是否包含了这一点。这有点主观,取决于你认为哪种方法最容易阅读,你希望如何处理坏数据,以及你可能希望添加什么类型的日志记录。谢谢你的回答,@Richard。但是,我的目标不是我所描述的可能的方法。我们不能做一些不替换字符的事情吗?用一个部分使用正则表达式的替代方法更新了我的答案。谢谢Richard。我倾向于迈克的回答。但如果正则表达式不匹配,您的答案确实提供了更大的灵活性。我想知道Mike的答案中是否包含了这一点。这有点主观,取决于您认为哪种方法最容易阅读,以及您希望如何使其适应坏数据,以及您可能希望添加哪种类型的日志记录。我试图避免替换。这就是为什么我问这个问题,我不认为你可以避免替换。根据我的回答,如果你使用正则表达式,你可以避免替换。我试图避免替换。这就是为什么我问这个问题,我不认为你可以避免替换。根据我的回答,如果你使用正则表达式,你可以避免替换。其他人,你能建议我们如何组合这两个LINQ语句吗?其他人,你能建议我们如何组合这两个LINQ语句吗?我喜欢你的答案。我确实有疑问。假设我的字符串是[City,Delhi]&[State,DL]&[Country,IN]&Weather,cold];我运行代码。我确实得到了正确的输出。但如果匹配失败,我没有选择采取行动。使用该字符串,第四个值将不匹配,因为它不符合您指示的格式。对于那些符合的,您可以直接枚举Regex.Matches的结果,并在添加到字典之前对每个结果求值。如果您是说方括号在数据字符串中是可选的,那么解决方案将略有不同。不,我不是说方括号是可选的,但由于这是用户提供的数据,因此无法保证。是的,我同意你所说的验证方法。谢谢你的时间,我喜欢你的回答。我确实有疑问。假设我的字符串是[City,Delhi]&[State,DL]&[Country,IN]&Weather,cold];我运行代码。我确实得到了正确的输出。但如果匹配失败,我没有选择采取行动。使用该字符串,第四个值将不匹配,因为它不符合您指示的格式。对于那些符合的,您可以直接枚举Regex.Matches的结果,并在添加到字典之前对每个结果求值。如果您是说方括号在数据字符串中是可选的,那么解决方案将略有不同。不,我不是说方括号是可选的,但由于这是用户提供的数据,因此无法保证。是的,我同意你所说的验证方法。谢谢你的时间