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

ユニオン関数を数学的に対応するように機能させるための提案はありますか?

4

2 に答える 2

16

LinqUnionは思い通りに機能します。入力ファイルが正しいことを確認してください (たとえば、行の 1 つに改行の前にスペースが含まれている可能性があります)、または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 に答える