如何将一串键/值对转换为HashTable或Dictionary或?

roy*_*yco 3 vb.net

在VB.NET中,如何将以下字符串转换为某种键/值类型,如Hashtable,Dictionary等?

"Name=Fred;Birthday=19-June-1906;ID=12345"
Run Code Online (Sandbox Code Playgroud)

我想提取生日或ID,而不必将字符串拆分为数组.

编辑:如果字符串的格式稍后更改,我宁愿不将字符串拆分为数组.我无法控制字符串.如果有人切换订单或添加另一个元素怎么办?

Kon*_*lph 5

我目前无法对此进行测试,缺少VB编译器,但以下解决方案也应该可行,并且它具有不需要显式循环的优点.它使用Linq方法ToDictionary和两个嵌套Split操作:

Dim s = "Name=Fred;Birthday=19-June-1906;ID=12345"
Dim d = s.Split(";"c).Select(Function (kvp) kvp.Split("="c)) _
    .ToDictionary( _
        Function (kvp) kvp(0), _
        Function (kvp) kvp(1))
Run Code Online (Sandbox Code Playgroud)

首先,我们拆分外部分隔符(即分号).从结果数组中,我们再次分裂选择,这次是=.生成的数组数组通过指定第一项成为键而第二项成为值(标识符kvp代表"键值对")转换为字典.

由于我无法检查确切的VB语法,以上可能包含细微的错误,这里是等效的C#代码(测试正确性):

var s = "Name=Fred;Birthday=19-June-1906;ID=12345";
var d = s.Split(';').Select(kvp => kvp.Split('='))
    .ToDictionary(kvp => kvp[0], kvp => kvp[1]);
Run Code Online (Sandbox Code Playgroud)