要转换为Dictionary的字符串数据

时间:2017-02-16 04:39:01

标签: c#

我有一个字符串

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

我想要一本字典。

我认为的方法是

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

4 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

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

一个天真的实现(没有错误处理)将是:

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);
}

答案 2 :(得分:0)

您可以使用linq

尝试此操作
string data = "[City, Delhi]&[State, DL]&[Country, IN]";
string[] arr = data.Replace("[", "").Replace("]", "").Split('&');
var dict = arr.ToList().ToDictionary(x => x.Split(',')[0], x => x.Split(',')[1]);

答案 3 :(得分:0)

试试这个......

 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是一个字典对象......