我有一个动态字符串:
看起来像"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表达式一个衬垫。
答案 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));
}