Bonjour,
J'ai une liste d'objet
Public romIndex As New List(Of Games)
Voici classe objet 'game' dans laquelle j'ai intégré une fonction de comparaison basée sur 'descript'.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| Public Class Games
Public Shared ReadOnly DescriptComparer As New DescriptComparerClass
Public rom As String
Public descript As String
Public genre As String
Sub New()
End Sub
Public Class DescriptComparerClass
Implements IComparer(Of Games)
Public Function Compare(ByVal x As Games, ByVal y As Games) As Integer Implements System.Collections.Generic.IComparer(Of Games).Compare
Return String.Compare(x.descript, y.descript, True)
End Function
End Class
End Class |
Ce qui me permet de faire du tri et BinarySearch basé sur 'descript' dans la liste
1 2 3 4 5 6 7
| romIndex.Sort
Dim ng As New Games
ng.descript = "test"
Dim ndx As Int32 = romIndex.BinarySearch(0, romIndex.Count, ng, Games.DescriptComparer)
If ndx >= 0 Then
Debug.Print ("Trouvé")
End If |
Alors, voila ma question:
=================
Comment pourrais-je faire une recherche dans la liste en partant uniquement des lettres du début du string. Donc pour reprendre l'exemple, trouver dans la liste le premier élément qui commencerait par "Te" (et qu'il me trouve "Test").
Pour l'instant j'ai simplement une boucle, mais je voudrais quelque chose de plus abouti car cela concerne des dizaines de milliers d'éléments et je sais qu'il doit y avoir plus performant que ma boucle
1 2 3 4 5 6 7
| For Each ri As Games In romIndex
If ri.descript.ToUpper.StartsWith(texteàtrouver) Then
...
...
Exit For
End If
Next |
Que puis je utiliser (et comment) qui ait la même "rapidité" qu'un BinarySearch (sur le string complet) avec uniquement le début d'un string?
J'espère que j'ai pu me faire comprendre ;-) et je vous remercie d'avance de l'aide que vous voudrez bien m'apporter
Partager