2014-05-21 14 views
5

ich eine Textdatei in einen Wörterbuch zu lesen einen kurzen Linq Ausdruck mitliest Textdatei in Wörterbuch ohne Duplikate

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

Diese so lange funktioniert gut, wie ich habe nicht Nachschlüssel in meiner Textdatei. Gibt es einen kurzen Weg, diese zu filtern, ohne den langen Weg zu gehen und über das Array lines [] zu iterieren?

+2

Was wollen * Sie * passieren, wenn es Dubletten gibt? Ich kann mir mindestens 5 verschiedene Optionen vorstellen. (Erste Gewinne, Letzte Gewinne, Ausnahme, machen Sie jeden Wert zu einer Liste, verwenden Sie eine Art Trennzeichen.) –

+0

Fügen Sie sie einfach nicht zum Wörterbuch hinzu :) – silent

+0

Sie wollen also einen "ersten Eintrag gewinnt" -Ansatz, schweigen Daten ignorieren? –

Antwort

10

können Sie GroupBy zuerst verwenden:

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

Dies wählt das erste Element jedes Duplikat, falls dies nicht gewünscht ist Sie haben g.First entsprechend zu ändern. Sie könnten zum Beispiel die Werte mit Komma trennen:

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