我到处都在搜索互联网
我只需要一个代码即可删除我的字符串/列表/ 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
答案 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()