将文本文件读入字典,且无重复项。

5
我正在使用简短的Linq表达式将文本文件读入字典。
string[] lines = File.ReadAllLines(path);
var dictionary = lines.Select(line => line.Split(';')).ToDictionary(keyValue => keyValue[0], bits => bits[1]);

只要我的文本文件中没有重复的键,这个方法就可以正常工作。有没有一种简单的方法来过滤这些键,而不是通过迭代lines[]数组的长方法?

2
如果有重复的数据,你希望发生什么?我可以想到至少5种不同的选项。 (第一个值获胜,最后一个值获胜,引发异常,将每个值都变成一个列表,使用某种分隔符。) - Jon Skeet
只是不要将它们添加到字典中即可 :) - silent
所以你想要一个“先到先得”的方法,默默地忽略数据? - Jon Skeet
2个回答

11

你可以先使用GroupBy

var dictionary = lines.Select(line => line.Split(';'))
    .GroupBy(arr => arr[0])
    .ToDictionary(g => g.Key, g => g.First()[1]);

如果您不希望选择每个重复元素的第一个元素,那么您需要相应地更改g.First。例如,您可以使用逗号分隔值:

var dictionary = lines.Select(line => line.Split(';'))
    .GroupBy(arr => arr[0])
    .ToDictionary(g => g.Key, g => string.Join(",", g.Select(arr=> arr[1])));

0

@Tim Schmelter。针对我的特定情况,我使用了您的代码+.Where()来删除空行:

var dictionary = lines.Select(line => line.Split(';'))
    .Where(line => line.Length == 2)
    .GroupBy(arr => arr[0])
    .ToDictionary(g => g.Key, g => g.First()[1]);

我在想是否有更好的方法。 谢谢


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