我有一个这样的字符串:
“用户= U123;名称=测试;姓=用户”
我想得到一个这样字符串的字典:
user "u123"
name "Test"
lastname "User"
这样我就可以轻松访问字符串中的数据。
我想在C#中执行此操作。
编辑:
这就是我到目前为止所做的:
public static Dictionary<string, string> ValueToDictionary(string value)
{
Dictionary<string, string> result = null;
result = new Dictionary<string, string>();
string[] values = value.Split(';');
foreach (string val in values)
{
string[] valueParts = val.Split('=');
result.Add(valueParts[0], valueParts[1]);
}
return result;
}
但说实话,我真的认为有更好的方法可以做到这一点。
干杯, 微米。
答案 0 :(得分:3)
您可以使用LINQ:
var text = "user=u123;name=Test;lastname=User";
var dictionary = (from t in text.Split( ";".ToCharArray() )
let pair = t.Split( "=".ToCharArray(), 2 )
select pair).ToDictionary( p => p[0], p => p[1] );
答案 1 :(得分:2)
将字符串拆分为“;”。
迭代结果数组中的每个元素,并将每个元素拆分为“=”。
现在; dictionary.add(element [0],element [1]);
我希望我说得够清楚。
答案 2 :(得分:1)
var dictionary = new Dictionary<string, string>();
var linedValue = "user=u123;name=Test;lastname=User";
var kvps = linedValue.Split(new[] { ';' }); // you may use StringSplitOptions.RemoveEmptyEntries
foreach (var kvp in kvps)
{
var kvpSplit = kvp.Split(new[] { '=' });
var key = kvpSplit.ElementAtOrDefault(0);
var value = kvpSplit.ElementAtOrDefault(1);
dictionary.Add(key, value);
// you may check with .ContainsKey if key is already persistant
// you may check if key and value with string.IsNullOrEmpty
}
答案 3 :(得分:1)
Dictionary<string, string> d = new Dictionary<string, string>();
string s1 = "user=u123;name=Test;lastname=User";
foreach (string s2 in s1.Split(';'))
{
string[] split = s2.Split('=');
d.Add(split[0], split[1]);
}
答案 4 :(得分:0)
如果您确定输入数据中没有分隔符字符,则以下工作
string input = "user=u123;name=Test;lastname=User";
string[] fragments = input.Split(";=".ToArray());
Dictionary<string,string> result = new Dictionary<string,string>()
for(int i=0; i<fragments.Length-1;i+=2)
result.Add(fragments[i],fragments[i+1]);
它可能比其他一些解决方案略胜一筹,因为它只调用一次Split()。通常我会选择其他任何解决方案,特别是如果代码的可读性对您有任何价值。
答案 5 :(得分:0)
我想我会这样做......
String s = "user=u123;name=Test;lastname=User";
Dictionary<string,string> dict = s.ToDictionary();
ToDictonary的实现与您的实现相同,只是我将其实现为extension method。它确实看起来更自然。