Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Parcours d'un tableau disjoint

4 réponses
Avatar
Guillaume JAY
J'ai un tableau d'element disjoint.
Genre :
a[1000]=5;
a[2300]=10;
Et bien entendu, a[1001] n' a jamais été défini.

Y a t il un moyen efficace de le parcourir, en récuperant les indices,
si je ne connais pas ces indices a l'avance ?
C'est a dire, autrement qu'en faisant une boucle de 1 a 1 000 000, et
en regardant ce qui n'est pas undefined.

Merci !

Guillaume

4 réponses

Avatar
Olivier Miakinen

J'ai un tableau d'element disjoint.
Genre :
a[1000]=5;
a[2300];
Et bien entendu, a[1001] n' a jamais été défini.

Y a t il un moyen efficace de le parcourir, en récuperant les indices,
si je ne connais pas ces indices a l'avance ?
C'est a dire, autrement qu'en faisant une boucle de 1 a 1 000 000, et
en regardant ce qui n'est pas undefined.


Oui. À priori « for (index in a) » devrait boucler deux fois, une fois
avec index = 1000, l'autre avec index = 2300.

--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)

Avatar
YD
J'ai un tableau d'element disjoint.
Genre :
a[1000]=5;
a[2300];
Et bien entendu, a[1001] n' a jamais été défini.

Y a t il un moyen efficace de le parcourir, en récuperant les indices,
si je ne connais pas ces indices a l'avance ?
C'est a dire, autrement qu'en faisant une boucle de 1 a 1 000 000, et
en regardant ce qui n'est pas undefined.


Déjà tu n'es pas obligé d'aller à 1 000 000 qui n'est pas assez grand -
valeur max. 2^32. Tu peux te limiter à a.length qui est plus grand de 1
que le plus grand des indices utilisés. Et encore plus rapide :

for (var o in a) /*traitement sur o*/;

retournera dans o les valeurs successives des indices définis (dans le
jargon js on parlerait plutôt de propriétés).

Attention, si tu définis un "indice" qui n'est pas une valeur numérique,
la propriété est créée et retournée. Pour reprendre ton exemple,
j'ajoute a["truc"]="machin", alors
for (var o in a) retournera successivement ces chaînes (String) :
"1000", "2300", "truc" !

--
Y.D.

Avatar
Guillaume JAY
On Thu, 17 Nov 2005 00:07:36 +0100, YD
wrote:
for (var o in a) /*traitement sur o*/;


Merci bcp, toi et Olivier.

Je m'attendait a quelque chose comme ca, mais je marche sur des oeufs,
en js.

Guillaume

Avatar
Olivier Miakinen

for (var o in a) /*traitement sur o*/;


Tiens, j'avais oublié le « var ». Ça marche sans mais c'est plus propre
avec.

for (var o in a) retournera successivement ces chaînes (String) :
"1000", "2300", "truc" !


Absolument. J'avais oublié de préciser que ce sont des chaînes, et que
les valeurs retournées sont donc "1000" et "2300" plutôt que 1000 et
2300 comme je l'avais écrit.

Règle numéro 1 : toujours lire les réponses de YD.

Règle numéro 2 : si une réponse contredit celle de YD, toujours croire
celle de YD.

--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)