cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 2021
-
3 mai 2008 à 16:46
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 2008
-
4 mai 2008 à 19:11
Bonjour à tous,
J'ai un tableau d'entiers (dynamique ou statique)
et je voudrais tester si une valeur est comprise dans mon tableau
sans passer par une boucle.
j'aimerais bien un truc comme if Numb in [ qlqchose ] then..
Caribensila
Messages postés2527Date d'inscriptionjeudi 15 janvier 2004StatutMembreDernière intervention16 octobre 201918 4 mai 2008 à 12:14
Francky il est têtu?
- Moais nooooon !
Voici un tableau ayant le comportement d'un ensemble et les mêmes inconvénients, mais sans boucle:
- type 8 bits
- pas plus de 256 valeurs
- une même valeur ne peut pas apparaître deux fois
Si on voulait travailler sur des Integers, vu la taille du tableau, il faudrait travailler sur le disque ou utiliser un Memory Mapped Files. Mais les perfs s'en ressentiraient. Tout dépend des besoins et du nombre d'accès au tableau... Y'en a qu'ont essayé, mais z'ont eu des problèmes.
Cela dit, c'est trèèèèèès rapide.
C'est vous qui voyez.
Y'en a qu'ont essayé, mais z'ont eu des problèmes...
C'est vous qui voyez.
...
Cela dit, c'est trèèèèèès rapide :
var TTablensemble : array[0..255] of boolean;
procedure TForm1.FormCreate(Sender: TObject);
var i : Integer;
Nbre : Byte;
begin
Randomize;
{Initialisation du tableau avec 20 Bytes aléatoires.}
for i := 1 to 20 do begin
Nbre := Trunc(Random * 256);
TTablensemble[Nbre] := true;
end;
end;
function IsIn(Nbre : Byte) : Boolean;
begin
result := TTablensemble[Nbre]; // C'est-y pas rapide, ça?
end;
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20083 4 mai 2008 à 19:11
"Oué mais pour tester si N est dans l'ENSEMBLE [X] faut bien qu'il regarde si chacun des éléments correspond à X ? Donc sans boucle pas possible."
> Tellement têtu que je ne comprends pas ta réponse !
Des boucles dans le CPU, il y en a de partout. Même pour faire une addition de deux Integer tu as une boucle.
Lorsque le CPU fait "bt" (Bit Test) il vérifie l'état des bits de ebx.
Mais t'imagine bien que le fait que ce soit une instruction native la rend infiniment plus rapide que n'importe quel autre truc que tu pourrais bricoler.
(d'ailleurs, la boucle est surement codée "à la main" par Intel&co).
Ceci dit, c'est pas pratique pour des tableaux (ici je parlais d'ensembles)
Et comme dirait Cari: y'en a qui ont essayé... !
@Cari: "Voici un tableau ayant le comportement d'un ensemble"
Ben c'est un ensemble alors !!!
ça ressemble à un canard... ça se comporte comme un canard: j'appelle ça un canard !! (quote: J.Riley: http://en.wikipedia.org/wiki/Duck_typing)