如何将逗号分隔的字符串转换为LIST或IEnumerable的KeyValuePair

时间:2018-03-16 15:46:12

标签: c# .net split

我有一个动态字符串:

看起来像"1: Name, 2: Another Name"这个。我想将其拆分并将其转换为List<KeyValuePair<int, string>>IEnmerable<KeyValuePair<int, string>>

我试过了。

myString.Split(',').Select(s => s => new KeyValuePair<int, string>( Convert.ToInt32(s.Substring(s.LastIndexOf(':'), s.Substring(0, s.LastIndexOf(':')) + 1))))

没有多大帮助。我可以做Dictionary或foreach或for循环的字符串。我宁愿做一个关键值对lambda表达式一个衬垫。

4 个答案:

答案 0 :(得分:1)

您需要先用逗号分割两次,然后用冒号分割。试试这段代码:

var input = "1: Name, 2: Another Name";

var list = input.Split(',')
    .Select(p =>
    {
        var kv = p.Split(':');
        return new KeyValuePair<int, string>(int.Parse(kv[0].Trim()), kv[1]);
    })
    .ToList();

答案 1 :(得分:1)

试试这个:

myString.Split(',').Select(s => new KeyValuePair<int, string>(
   int.Parse(s.Split(':').GetValue(0).ToString()),
   s.Split(':').GetValue(1).ToString()
));

答案 2 :(得分:1)

一衬垫:

警告:无异常处理

myString.Split(',').Select(x => new KeyValuePair<int, string>(int.Parse(x.Split(':')[0]), x.Split(':')[1]))

答案 3 :(得分:0)

另一种通过正则表达式实现这一目标的方法:

var result = new List<KeyValuePair<int, string>>();
foreach (Match match in Regex.Matches("1: Name, 2: Another Name", @"((\d+): ([\w ]+))"))
{
    result.Add(new KeyValuePair<int, string>(int.Parse(match.Groups[2].Value), match.Groups[3].Value));
}