2014-05-21 46 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])));