Bonjour,

J'ai une liste d'objet

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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'.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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