如何通过新行字典<string,string>将字符串拆分为键值对

时间:2015-08-05 06:26:00

标签: c# string dictionary string-split

字符串格式

addr,hname,beam,txrate,rxrate,dcap,ucap,txuse,rxuse,rxrssi0,rxrssi1,txrssi0,txrssi1,txper,rxper,txopqual
04:18:D6:bb:F4:C6,Name,0,270000,270000,295650,263250,31,17,35,36,37,35,124,229,0

期望的输出

addr = 04:18:D6:bb:F4:C6
hname = Name
beam = 0

依旧...... ... 我想配对t键值,但键是一个新的行形式的值,并将它们放入一个字典输出使用此代码工作,但我想知道是否有一个更有效的方法来做这将跳过空值

这是我到目前为止所拥有的

Dictionary<string, string> INFO =  new Dictionary<string, string>();
var terminal = client.RunCommand("amstainfo");
var output = terminal.Result;
string[] line = output.Split(new string[] { "\n" }, StringSplitOptions.None);
string[] KEY = line[0].Split(new string[] { "," }, StringSplitOptions.None);
string[] VALUE = line[1].Split(new string[] { "," }, StringSplitOptions.None);
int i = 0;
foreach (var ist in KEY)
{
    INFO.Add(KEY[i], VALUE[i]);
    i++;
}

2 个答案:

答案 0 :(得分:5)

这似乎很直接:

var lines = text.Split(
    Environment.NewLine.ToCharArray(),
    StringSplitOptions.RemoveEmptyEntries);

var INFO =
    lines[0].Split(',')
        .Zip(lines[1].Split(','), (key, value) => new { key, value })
        .Where(x => !String.IsNullOrEmpty(x.value))
        .ToDictionary(x => x.key, x => x.value);

这给出了:

result

答案 1 :(得分:4)

您可以在foreach循环中包含if语句,以在将值添加到字典之前检查该值是否为空或为空。

foreach (var ist in KEY)
{
    if(!string.IsNullOrEmpty(VALUE[i]))
    {
       INFO.Add(KEY[i], VALUE[i]);
    }
    i++;
}