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

时间:2010-05-12 09:13:29

标签: c# linq

我有一个类型字符串数组,如下所示: "test1|True,test2|False,test3|False,test4|True"。 这本质上是一个二维数组 [TEST1] [TRUE] [TEST2] [FALSE] [TEST3] [FALSE] [TEST4] [TRUE]。

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

Dictionary<string, bool> myResults = results.Split(",".ToCharArray).ToDictionary()

任何想法?

4 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:5)

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

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

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

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

ToDictionary方法有2个函数,用于从每个源数组元素中提取键和元素数据。

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

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

Marcelo's答案类似,但我认为它更优雅。

答案 2 :(得分:-1)

这样的事情应该有效:

var fullString = "Test,True|Test2,False";

var query = from item in fullString.Split('|')
            let splitted = item.Split(',')
            let value = bool.Parse(splitted[1])
            select new { Key = splitted[0], Value = value };

var dict = query.ToDictionary(pair => pair.Key, pair => pair.Value);

答案 3 :(得分:-1)

您可以尝试这样的事情:

var resultsArray = results.Split(',');

var myResults = new Dictionary<string, bool>();

foreach (var str in resultsArray)
{
    var parts = str.Split('|');
    myResults.Add(parts[0], bool.Parse(parts[1]));
}