你怎么能改变“;”将字符串分隔成某种字典?

时间:2010-06-08 07:30:15

标签: c# string dictionary

我有一个这样的字符串:
“用户= 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;
}

但说实话,我真的认为有更好的方法可以做到这一点。

干杯, 微米。

6 个答案:

答案 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。它确实看起来更自然。