我有一个字符串字符串数据转换为字典
string data = "[City, Delhi]&[State, DL]&[Country, IN]";
从中我想的字典。
我想的方法是
- 拆分的 “&”
- 在所得的阵列,解析每个元件 2.1替换 “[” 和 “]” 2.2插入到字典
我讨厌这种方法,因为我的字符串已经有“[”和“]”,我应该可以直接将它添加到Dictionary中。
我有一个字符串字符串数据转换为字典
string data = "[City, Delhi]&[State, DL]&[Country, IN]";
从中我想的字典。
我想的方法是
我讨厌这种方法,因为我的字符串已经有“[”和“]”,我应该可以直接将它添加到Dictionary中。
这是一个很好的使用情况进行定期表达式。
var d = Regex.Matches(data, @"\[(?<k>[^,]+), (?<v>[^]]+)\]")
.OfType<Match>()
.ToDictionary(m => m.Groups["k"].Value, m => m.Groups["v"].Value);
我喜欢你的答案。我确实有疑问。假设我的字符串是“”[City,Delhi]&[State,DL]&[Country,IN]&Weather,cold]“;”我运行代码。我确实得到了正确的输出。但是如果比赛失败,我没有办法采取行动。 – Rajat
使用该字符串时,第四个值不匹配,因为它不符合您指定的格式。对于符合条件的用户,您可以直接枚举'Regex.Matches()'的结果并在添加到字典之前对它们进行评估。如果您在数据字符串中表示方括号是可选的,那么解决方案会稍有不同。 –
不,我并不是说方括号是可选的,但由于这是用户提供的数据,所以不能保证。是的,我同意你说的验证方法。感谢您的时间 – Rajat
你所描述的方法可能和它将要获得的一样好。
一个天真的实现(没有错误处理)将是:
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);
}
可以使用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]);
试试这个试试这个...
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是一个字典对象......
其他人,你能否提出建议我们如何结合这两个LINQ语句? – A3006
你通过_should的意思是能够直接将其添加到Dictionary_? –
当我看字典中的元素时,我用格式“[key,value]”来看它们。我希望能够从这个字符串 – Rajat