完全删除重复的行

时间:2020-08-09 09:34:37

标签: vb.net duplicates removeall

我到处都在搜索互联网

我只需要一个代码即可删除我的字符串/列表/ richtextbox中所有重复的代码 这是我想要的示例:

我接受C#和VB.NET代码

发件人:

asd
asd
djsdjjd
252

收件人:

djsdjjd
252

我尝试过的代码:

Dim liness As New List(Of String)(RichTextBox1.Lines)
Dim lines2() As String = (From s As String In liness).Distinct.ToArray
RichTextBox1.Lines = lines2
Dim count As Integer = liness.Count - lines2.Length
MessageBox.Show(count.ToString)

Dim lines1 As New List(Of String)(RichTextBox1.Lines)
Dim testint As Integer
For i As Integer = lines1.Count - 1 To 1 Step -1
    If lines1(i) = lines1(i - 1) Then
        lines1.RemoveAt(i)
        lines1.RemoveAt(i - 1)
        i = -1
    End If
Next
MsgBox("")
RichTextBox1.Lines = lines1.ToArray

2 个答案:

答案 0 :(得分:2)

或者您也可以使用:

std::string // instead of string

答案 1 :(得分:1)

有许多方法可以完成此操作。这只是其中之一:

Dim linesByCount As New Dictionary(Of String, Integer)

For Each line In RichTextBox1.Lines
    If linesByCount.ContainsKey(line) Then
        lineByCount(line) += 1
    Else
        lineByCount.Add(line, 1)
    End If
Next

Dim uniqueLines As New List(Of String)

For Each line In linesByCount.Keys
    If linesByCount(line) = 1 Then
        uniqueLines.Add(line)
    End If
Next

RichTextBox1.Lines = lines.ToArray()

这是使用LINQ的另一种选择:

RichTextBox1.Lines = RichTextBox1.Lines.
                                  GroupBy(Function(s) s).
                                  Where(Function(g) g.Count() = 1).
                                  Select(Function(g) g.Key).
                                  ToArray()

无论选择哪种选项,诀窍都是先删除每个值,然后再删除任何内容。否则,您将不会知道重复项的最后一个实例实际上是重复项。也就是说,这两个选项均未删除任何内容。他们创建一个包含每个项目计数的列表,然后挑选出计数为1的项目并将其添加到新列表中。

这里还有另一个选择:

Dim lines = RichTextBox1.Lines

RichTextBox1.Lines = lines.Where(Function(s) Array.IndexOf(lines, s) = Array.LastIndexOf(lines, s)).ToArray()