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

8
我有一个类型为字符串的数组,看起来像这样:"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()

有什么想法吗?


没有字符串类型的数组这种东西。我认为你指的是一个被编码在字符串中的数组。 - Marcelo Cantos
抱歉,是的,我想将一个字符串即时转换为2D数组,并在LINQ语句中将其转换为字典对象。 - Webcognoscere
这个问题的答案展示了有多种不同的做法。到目前为止,每个人的答案都略有不同,但都是有效的。我的投票给了Marcelo,因为我认为它最优雅。 - Simon P Stevens
4个回答

8
var d = results.Split(',')
               .Select(row => row.Split('|'))
               .ToDictionary(srow => srow[0], srow => bool.Parse(srow[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 的 答案类似,但我认为它更加优雅。

-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);

-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]));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接