2014-05-21 47 views
5

我使用的是短LINQ表达式阅读文本文件导入词典没有重复

string[] lines = File.ReadAllLines(path); 
var dictionary = lines.Select(line => line.Split(';')).ToDictionary(keyValue => keyValue[0], bits => bits[1]); 

这只是正常,只要我没有在我的文本文件中的重复键读取文本文件到字典中。有没有一种简单的方法来过滤那些没有很长的路线,迭代行[]数组?

+2

如果有重复项,您希望发生什么?我能想到至少5种不同的选择。 (首先获胜,最后获胜,例外,使每个值成为一个列表,使用某种分隔符。) –

+0

只是不要将它们添加到词典:) – silent

+0

因此,你想要一个“第一个入场胜利”的方法,默默地忽略数据? –

回答

10

您可以使用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])));