TRI INVERSÉ DANS UNE TLISTBOX

DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015 - 19 juin 2004 à 12:03
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 - 27 août 2005 à 17:46
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/23817-tri-inverse-dans-une-tlistbox

cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
27 août 2005 à 17:46
japee va encore me reprocher de ne pas être d'accord avec lui, mais le Exchange de drjerome est LA(!) solution :
- la plus rapide: Exchange est meilleur que Add/Append ou même que des échanges en passant par des buffers en format String
- la plus économe en mémoire: on ne passe pas par un objet complètement inutile
- la mieux pour le CPU: moins de choses à faire -> c'est naturel.

C'est d'ailleurs comme çà que j'aurais eu la réponse, mais avec une demi-boucle FOR pour réduire encore la longueur du code.
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
19 juin 2004 à 14:44
P.S. :

il fallait lire "donc il n'ya pas d'économie sur ma méthode par rapport à la tienne "

(j'avais mis "mienne")
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
19 juin 2004 à 14:42
Il n'y a pas de défaite ce sont des variantes... ;)

D'ailleurs je ne sais pas (au niveau assembleur) comment delphi compile tout ça...

Le résultat c'est que ça marche, je ne pense pas que ta solution ou la mienne soient bonnes ou mauvaises

Ma méthode avec Exchange utilise un TObject (si on regarde le code interne qu'utilise Delphi) donc il n'ya pas d'économie sur ma méthode par rapport à la mienne (je présume)

au niveau rapidité et espace mémoire il ne doit pas y avoir grande différence

L'essentiel c'est la logique et tu n'en manque pas...le reste ce sont des astuces de chacun sans importaance vitale

JROD DorotheeJ
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
19 juin 2004 à 13:42
Bravo, doc !
L'économie de moyens est évidente...
Tous les chemins mènent à Rome, mais le tien est le plus court ;)
A ma décharge, j'ai planché sur mon code un peu vite, je le destinais au départ à une réponse sur le forum... mais bon, j'admets ma "défaite" (lol).
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
19 juin 2004 à 12:03
Deux autres versions :

La 1° est un ordre alphabétique décroissant :
______________________________________________________
var
i:byte;
begin
listbox1.Sorted:=false;
listbox1.Sorted:=true;
i:=0;
while i<(listbox1.Items.Count-1)-i do
begin
listbox1.Items.Exchange(i,(listbox1.Items.Count-1)-i);
inc(i);
end;
end;
______________________________________________________


le 2° (si vous placez le code dans un dans un Button), donne alternativement à chaque click ordre Alphab décroissant/croissant :

______________________________________________________
var
i:byte;
begin
listbox1.Sorted:=true;
i:=0;
while i<(listbox1.Items.Count-1)-i do
begin
listbox1.Items.Exchange(i,(listbox1.Items.Count-1)-i);
inc(i);
end;
end;
______________________________________________________

JROD DorotheeJ

________________________
Rejoignez-nous