OVH Cloud OVH Cloud

Obtenir l'indice du dernier élement d'un tableau imaginaire ?

6 réponses
Avatar
ctobini
Bonjour,

Je voudrais savoir s'il y a moyen de conna=EEtre rapidement l'indice du
dernier =E9l=E9ment d'un tableau imaginaire :

si j'ai @a =3D (), alors $#a retourne l'indice du dernier =E9lement.

si j'ai $a =3D [], ma premi=E8re id=E9e est de faire une pirouette du style
$size =3D @{$a} et le dernier =E9l=E9ment est $size-1

Je me sers actuellement du livre 'Introduction =E0 Perl' chez O'Reilly
mais je n'ai pas vu l'info.

En vous remerciant.

C=2E Tobini

6 réponses

Avatar
Paul Gaborit
À (at) 11 Oct 2005 02:47:47 -0700,
"ctobini" écrivait (wrote):
si j'ai @a = (), alors $#a retourne l'indice du dernier élement.


Oui.

si j'ai $a = [], ma première idée est de faire une pirouette du style
$size = @{$a} et le dernier élément est $size-1


C'est pareil :

$#{$a}

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
Jacques Caron
On Tue, 11 Oct 2005 12:02:31 +0200, Paul Gaborit
wrote:

si j'ai $a = [], ma première idée est de faire une pirouette du style
$size = @{$a} et le dernier élément est $size-1


C'est pareil :

$#{$a}


Ah tiens j'avais jamais pensé à ça. Ceci dit, bizarrement, il semblerait
que $#{$a} soit plus lent que scalar @$a.

Jacques.
--
Oxado http://www.oxado.com/


Avatar
Paul Gaborit
À (at) Tue, 11 Oct 2005 18:08:41 +0200,
"Jacques Caron" écrivait (wrote):
Ah tiens j'avais jamais pensé à ça. Ceci dit, bizarrement, il
semblerait que $#{$a} soit plus lent que scalar @$a.


Quelques tests rapides (donc non fiables ;-) ) montrent effectivement
une différence de performances : elle est du simple au double en
version 5.6.x et de l'ordre de +10% en version 5.8.x.

Peut-être est-ce dû à la prise en compte de la variable $[ (l'indice
du premier élément)...

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
Jacques Caron
On Tue, 11 Oct 2005 18:28:47 +0200, Paul Gaborit
wrote:

Quelques tests rapides (donc non fiables ;-) ) montrent effectivement
une différence de performances : elle est du simple au double en
version 5.6.x et de l'ordre de +10% en version 5.8.x.


J'ai trouvé presque 20% en 5.8.6.

Peut-être est-ce dû à la prise en compte de la variable $[ (l'indice
du premier élément)...


Un (scalar @$a)-1+$[ est effectivement du même niveau que $#{$a}.

Jacques.
--
Oxado http://www.oxado.com/

Avatar
Paul Gaborit
À (at) Tue, 11 Oct 2005 18:57:16 +0200,
"Jacques Caron" écrivait (wrote):
Peut-être est-ce dû à la prise en compte de la variable $[ (l'indice
du premier élément)...


Un (scalar @$a)-1+$[ est effectivement du même niveau que $#{$a}.


C'est donc bien ça.

On peut écrire @$a-1 ou @$a-1+$[ (sans le 'scalar'), Perl fera
tout seul la conversion 'scalar' puisque le contexte lui impose...

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>


Avatar
ctobini
Bonjour Paul et merci de la réponse,



[...]
C'est pareil :

$#{$a}
[...]


J'avais déréférencé dans (presque donc :-) ) tous les sens mais pas
celui-là.

Merci beaucoup et bonne journée.

C. Tobini