我有一个类型字符串数组,如下所示:
"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()
任何想法?
答案 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]));
}