2009-08-09 19 views
5

Estoy usando VB .NET y sé que Union normalmente funciona ByRef pero en VB, las cadenas generalmente se procesan como si fueran tipos de datos primitivos.¿Por qué la función Union en LINQ no elimina las entradas duplicadas?

Por consiguiente, aquí está el problema:

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 contiene:
un
b
c
d
e

2.txt contiene:
b
c
d
e
f
g
h
i
j

Después de ejecutar el código, consigo:
un
b
c
d
e
b
f
g
h
i
j

Cualquier sugerencias para hacer la función de la Unión actúen como su contraparte matemática?

Respuesta

16

LINQ Union no funciona como se desea. Asegúrese de que sus archivos de entrada son correctos (por ejemplo, una de las líneas puede contener un espacio antes de la nueva línea) o Trim() las cadenas después de la división?

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 

En linqpad, el resultado es {"a", "s", "d", "f", "123" }

+0

Has encontrado el problema. ¡Muchas gracias! –

2

Creo que desea utilizar la función Distinct. A continuación, el final de su declaración de LINQ hacer .Distinct();

var distinctList = yourCombinedList.Distinct(); 

similar a un "SELECT DISTINCT en SQL :)

+4

no debe ser necesario después de método de la Unión de LINQ –

+0

Tiene razón distinta, que debería haber dicho, la lista 'combinado' en mi ejemplo. Actualizándolo para reflejar ese agradecimiento. – Kelsey

Cuestiones relacionadas