如何将二维数组转换为字典对象

Web*_*ere 8 c# linq

我有一个类型字符串数组,如下所示: "test1|True,test2|False,test3|False,test4|True".这本质上是一个二维数组,如此[test1] [True] [test2] [False] [test3] [False] [test4] [True].

我想将其转换为dictionary<string,bool>使用linq,例如:

Dictionary<string, bool> myResults = results.Split(",".ToCharArray).ToDictionary()
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Mar*_*tos 8

var d = results.Split(',')
               .Select(row => row.Split('|'))
               .ToDictionary(srow => srow[0], srow => bool.Parse(srow[1]));
Run Code Online (Sandbox Code Playgroud)


Sim*_*ens 5

首先将您的字符串转换为正确的数组:

String sData = "test1|True,test2|False,test3|False,test4|True";
String[] sDataArray = sData.Split(',');
Run Code Online (Sandbox Code Playgroud)

然后你可以处理String[]成字典:

var sDict = sDataArray.ToDictionary(
        sKey => sKey.Split('|')[0], 
        sElement => bool.Parse(sElement.Split('|')[1])
    );
Run Code Online (Sandbox Code Playgroud)

ToDictionary方法需要2个功能,其提取从每个源数组元素中的键和元素数据.

在这里,我通过拆分"|"来提取每一半 然后使用前半部分作为键,第二部分我将其解析为a bool用作元素.

显然,这不包含错误检查,因此如果源字符串不是逗号分隔,或者每个元素都不是管道分隔的,则可能会失败.所以要小心源字符串的来源.如果它与这种模式完全匹配则会失败,因此您需要进行一些测试和验证.

Marcelo的回答是类似的,但我认为它更优雅.