Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Utilisation de SearchStringList. Jeu 14 Jan 2016 - 13:34 | |
| Bonjour.
@Klaus.
Je serais intéressé de connaître l'algorithme utilisé dans cette fonction.
Je pense également que cette fonction pourrait être optimisée en temps d'exécution.
Car la recherche de 1.000 éléments s'exécute en 38 sec. !!
Merci Klaus.
| |
|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Utilisation de SearchStringList. Jeu 14 Jan 2016 - 13:53 | |
| Le principe est le suivant: - si la StringList n'est pas triée, on la parcourt à partir du début et un s'arrête si l'enregistrement est trouvé - si la StringList est triée en mode 1 (système), on effectue la recherche par une seule commande par la méthode Find de l'objet TStringList - durée incompressible car méthode interne à Delphi - si la StringList est triée en mode 3 (personnalisée), on utilise une recherche par dichotomie, en comparant chaque chaîne trouvée au critère par une fonctions de comparaison spéciale. La fonction de comparaison est: - Code:
-
function ComparerChaine1(sTmp1, sTmp2: string): Integer; var i, n, l1, l2, c1, c2: integer; begin // Chaines à comparer try l1 := length(sTmp1); l2 := length(sTmp2); n := min(l1,l2); for i:=1 to n do begin result := ord(sTmp1[i])- ord(sTmp2[i]); if result<>0 then exit; end; except result := 0; end; end; Ce qui est très rapide, en procédant par des pointeurs. | |
|
Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Utilisation de SearchStringList. Jeu 14 Jan 2016 - 14:00 | |
| Bonjour.
Merci Klaus de la réponse rapide. Enfin, je croyais que tu avais la main sur la fonction 'Find', mais je vois que ce n'est pas le cas. Dommage. | |
|
Contenu sponsorisé
| Sujet: Re: Utilisation de SearchStringList. | |
| |
|