DRJEROME
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention 5 février 2015
-
19 juin 2004 à 12:03
cs_grandvizir
Messages postés1106Date d'inscriptionsamedi 8 novembre 2003StatutMembreDerniè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.
cs_grandvizir
Messages postés1106Date d'inscriptionsamedi 8 novembre 2003StatutMembreDernière intervention 3 septembre 200622 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és436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDerniè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és436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDerniè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és1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 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és436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDerniè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;
______________________________________________________
27 août 2005 à 17:46
- 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.
19 juin 2004 à 14:44
il fallait lire "donc il n'ya pas d'économie sur ma méthode par rapport à la tienne "
(j'avais mis "mienne")
19 juin 2004 à 14:42
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
19 juin 2004 à 13:42
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).
19 juin 2004 à 12:03
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
________________________