2009-08-09 8 views
5

Ich benutze VB.NET und ich weiß, dass Union normalerweise ByRef funktioniert, aber in VB, Strings werden in der Regel so verarbeitet, als ob sie primitive Datentypen waren.Warum entfernt die Union-Funktion in LINQ doppelte Einträge nicht?

Folglich hier ist das Problem:

Sub Main() 
    Dim firstFile, secondFile As String(), resultingFile As New StringBuilder 

    firstFile = My.Computer.FileSystem.ReadAllText(My.Computer.FileSystem.SpecialDirectories.Desktop & "\1.txt").Split(vbNewLine) 
    secondFile = My.Computer.FileSystem.ReadAllText(My.Computer.FileSystem.SpecialDirectories.Desktop & "\2.txt").Split(vbNewLine) 

    For Each line As String In firstFile.Union(secondFile) 
     resultingFile.AppendLine(line) 
    Next 

    My.Computer.FileSystem.WriteAllText(My.Computer.FileSystem.SpecialDirectories.Desktop & "\merged.txt", resultingFile.ToString, True) 
End Sub 

1.txt enthält:
ein
b
c
d
e

2.txt enthält:
b
c
d
e
f
g
h
i
j

Nachdem der Code ausgeführt wird, erhalte ich:
ein
b
c
d
e
b
f
g
h
i
j

Irgendwelche Vorschläge für die Herstellung der Union Funktion wirken wie ihre mathematische Entsprechung?

Antwort

16

Linq Union nicht durchführt, wie Sie es wollen. Stellen Sie sicher, dass die Eingabedateien korrekt sind (z. B. kann eine der Zeilen ein Leerzeichen vor dem Zeilenende enthalten) oder Trim() die Zeichenfolgen nach dem Aufteilen?

var list1 = new[] { "a", "s", "d" }; 
var list2 = new[] { "d", "a", "f", "123" }; 
var union = list1.Union(list2); 
union.Dump(); // this is a LinqPad method 

In linqpad, das Ergebnis {"a", "s", "d", "f", "123" }

+0

Sie haben das Problem gefunden. Vielen Dank! –

2

Ich denke, dass Sie die Distinct-Funktion verwenden möchten. Bei dann tun Ende Ihrer LINQ-Anweisung .Distinct();

var distinctList = yourCombinedList.Distinct(); 

Ähnlich wie bei einem 'SELECT DISTINCT' in SQL :)

+4

Distinct ist, sollte nach Linq der Union Verfahren nicht erforderlich –

+0

Sie sind richtig, hätte ich sagen sollen, 'kombiniert' Liste in meinem Beispiel. Aktualisieren Sie es, um diesen Dank zu reflektieren. – Kelsey

Verwandte Themen