我有一个带有一些密钥对值的文件
key1 = value1
key2 = value2
[section name]
key3 = value3
key4 = value4
所以我不关心部分名称,因为键是唯一的。我只想获取输入键的值。我有以下内容来阅读这些内容。
var userDataLines = File.ReadAllLines(pathToFile);
我有类似的东西
var result = userDataLines.Select(userDataLine => userDataLine.Split(new[] { '=' }))
.Where(split => split.Length == 2);
为我提供了一个集合中的所有键值对。
但基本上我想从我的文件中获取一个包含键和值的字典,但不知道该怎么做。有人能指引我朝正确的方向发展吗?
由于
答案 0 :(得分:5)
您可以按如下方式使用ToDictionary Extension Method:
var result = File.ReadLines(pathToFile)
.Select(line => line.Split(new[] { '=' }, 2))
.Where(split => split.Length == 2)
.ToDictionary(split => split[0], split => split[1]);
(小改进:使用ReadLines代替ReadAllLines,并将每行拆分为at most 2 parts。)
答案 1 :(得分:2)
有一个LINQ扩展方法:
var result = userDataLines.Select(userDataLine => userDataLine.Split(new[] { '=' }))
.Where(split => split.Length == 2)
.ToDictionary(split => split[0], split => split[1]);
答案 2 :(得分:0)
您可以使用ToDictionary
扩展方法并告诉它哪个元素是键,哪个是值:
var dictionary = userDataLines.Select(x => x.Split(new[] { '=' }))
.Where(x => x.Length == 2)
.ToDictionary(x => x[0], x => x[1]);
答案 3 :(得分:0)
var result = (from a in userDataLines
let pairs = a.Split('=')
where !string.IsNullOrEmpty(a) && !a.Trim().StartsWith("[")
select new { Key = pairs[0].Trim(), Value = pairs[1].Trim() });
我发现Linq更容易阅读,我不知道ToDictionary方法!