2017-05-07 11 views
0

Ich habe die folgende Klasse:löschen Duplikate aus der Liste

Public Class titlesclass 
Public Property Link As String 
Public Property Title As String 

Public Function Clear() 
    Link.Distinct().ToArray() 
    Title.Distinct().ToArray() 

End Function 
End Class 

Und den folgenden Code:

For Each title As Match In (New Regex(pattern).Matches(content)) 'Since you are only pulling a few strings, I thought a regex would be better. 
      Dim letitre As New titlesclass 
      letitre.Link = title.Groups("Data").Value 
      letitre.Title = title.Groups("Dataa").Value 
      lestitres.Add(letitre) 
      'tempTitles2.Add(title.Groups("Dataa").Value) 
     Next 

Ich versuchte, die duplizierten Saiten mit der auf einfache Weise

Dim titles2 = lestitres.Distinct().ToArray() 

zu löschen Und ruft die Klassenfunktion auf:

Aber die beiden Sätze hat nicht funktioniert, ich weiß, dass ich etwas sehr einfach bin fehlt aber immer noch nicht finden, was es

ist
+0

Ich habe schlechte Nachrichten .. Sie nicht etwas einfaches, String.Distinct() zu verpassen. ToArray() tut nicht, was Sie denken, dass es tut, und die Klasse muss IComparable für Distinct implementieren, um zu wissen, wie man sie vergleicht https://support.microsoft.com/en-us/help/321292/how-to-use-the-icomparable-and-the-icomparer-interfaces-in-visual-basic-.net-or-invisual -basic-2005 – Slai

+0

Sehen Sie, ob Sie das nutzen können. http://stackoverflow.com/questions/10632776/fastest-way-to-remove-duplicate-value-from-a-list-by-lambda –

Antwort

2

einfacher, eine Klasse zu verwenden, die bereits implementiert IComparable:

Dim query = From title In Regex.Matches(content, pattern).Cast(Of Match) 
      Select Tuple.Create(title.Groups("Data").Value, title.Groups("Dataa").Value) 

For Each letitre In query.Distinct 
    Debug.Print(letitre.Item1 & ", " & letitre.Item2) 
Next 

oder Anonymous Types:

Dim query = From title In Regex.Matches(content, pattern).Cast(Of Match) 
      Select New With {Key .Link = title.Groups("Data").Value, 
          Key .Title = title.Groups("Dataa").Value} 

For Each letitre In query.Distinct 
    Debug.Print(letitre.Link & ", " & letitre.Title) 
Next 
2

Ok, da ich feststellen, Sie verwenden ein Class
Er Dies ist eine Option, die Sie tun können, um keine doppelten Einträge zu Ihrer List innerhalb einer Klasse hinzuzufügen.

Ich benutze eine Konsole-Anwendung, um dieses Beispiel zu schreiben, es sollte nicht zu schwer zu verstehen und bei Bedarf zu einer Windows Form Application konvertieren.

Module Module1 

Sub Main() 
    Dim titlesClass = New Titles_Class() 
    titlesClass.addNewTitle("myTitle") ''adds successfully 
    titlesClass.addNewTitle("myTitle") '' doesn't add 
End Sub 

Public Class Titles_Class 
    Private Property Title() As String 
    Private Property TitleArray() As List(Of String) 

    Public Sub New() 
     TitleArray = New List(Of String)() 
    End Sub 

    Public Sub addNewTitle(title As String) 
     Dim added = False 
     If Not taken(title) Then 
      Me.TitleArray.Add(title) 
      added = True 
     End If 
     Console.WriteLine(String.Format("{0}", If(added, $"{title} has been added", $"{title} already exists"))) 
    End Sub 

    Private Function taken(item As String) As Boolean 
     Dim foundItem As Boolean = False 
     If Not String.IsNullOrEmpty(item) Then 
      foundItem = Me.TitleArray.Any(Function(c) -1 < c.IndexOf(item)) 
     End If 
     Return foundItem 
    End Function 

End Class 
End Module 


Eine weitere Möglichkeit, ein HashSet zu verwenden wäre, Es wird nie ein Duplikat Element hinzufügen, so dass selbst wenn Sie ein Element mit dem gleichen Wert hinzufügen, es wird es nicht hinzufügen und pflegt
wirft einen Fehler

Sub Main() 
    Dim titlesClass = New HashSet(Of String) 
    titlesClass.Add("myTitle") ''adds successfully 
    titlesClass.Add("myTitle") '' doesn't add 

    For Each title As String In titlesClass 
     Console.WriteLine(title) 
    Next 

End Sub 

Mit all das beiseite, haben Sie darüber nachgedacht, eine Dictionary so verwenden, dass Sie den Titel als Schlüssel und den Link als Wert haben könnte, dass eine andere Art und Weise sein, würden Sie nicht eine Liste (Wörterbuch) haben könnte enthalten doppelte Artikel

Verwandte Themen