6

我正在使用 VB .NET,并且我知道 Union 通常可以通过 ByRef 工作,但在 VB 中,字符串通常被当作原始数据类型来处理。

因此,这就是问题所在:

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 包含:
a
b
c
d
e

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

运行代码后,我得到:
a
b
c
d
e
b
f
g
h
i
j

有什么建议可以让 Union 函数表现得像它的数学对应物吗?

4

2 回答 2

16

LinqUnion确实按照您的意愿执行。确保您的输入文件正确(例如,其中一行可能在换行符之前包含一个空格)或Trim()拆分后的字符串?

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

linqpad中,结果是{"a", "s", "d", "f", "123" }

于 2009-08-09T04:39:41.820 回答
2

我认为您想使用 Distinct 功能。然后在您的 LINQ 语句结束时.Distinct();

var distinctList = yourCombinedList.Distinct();

类似于 SQL 中的 'SELECT DISTINCT' :)

于 2009-08-09T04:26:03.500 回答