2009-08-09 3 views
5

J'utilise VB .NET et je sais que l'Union fonctionne normalement ByRef mais dans VB, les chaînes sont généralement traitées comme s'il s'agissait de types de données primitifs.Pourquoi la fonction Union dans LINQ ne supprime-t-elle pas les entrées en double?

Par conséquent, voici le problème:

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

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

Après l'exécution du code, j'obtiens:
un
b
c
d
e
b
f
g
h
i
j

Toutes les suggestions pour faire l'acte de fonction Union comme son homologue mathématique?

Répondre

16

Linq Union ne fonctionne comme vous le souhaitez. Assurez-vous que vos fichiers d'entrée sont corrects (par exemple, l'une des lignes peut contenir un espace avant la nouvelle ligne) ou Trim() les chaînes après division?

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, le résultat est {"a", "s", "d", "f", "123" }

+0

Vous avez trouvé le problème. Merci beaucoup! –

2

Je pense que vous voulez utiliser la fonction Distinct. À la fin de puis votre déclaration LINQ faire .Distinct();

var distinctList = yourCombinedList.Distinct(); 

similaire à un «SELECT DISTINCT dans SQL :)

+4

Distinct ne devrait pas être nécessaire après la méthode de l'Union de Linq –

+0

Vous avez raison, je l'ai dit, la liste « combinée » dans mon exemple. Mise à jour pour refléter cela merci. – Kelsey

Questions connexes