282 votes

Trouver la taille du tableau en Perl

J'apprends perl et il me semble avoir rencontré plusieurs façons de trouver la taille d'un tableau. Quelle est la différence entre ces trois méthodes?

 my @arr = (2);
print scalar @arr; # first way to print array size
print $#arr; # second way to print array size
my $arrSize = @arr;
print $arrSize; # third way to print array size
 

266voto

Chris Jester-Young Points 102876

Les premier et troisième moyens sont les mêmes: ils évaluent un tableau dans un contexte scalaire. Je considère que c'est la façon standard d'obtenir la taille d'un tableau.

La deuxième manière retourne réellement le dernier index du tableau, qui n'est pas (habituellement) le même que la taille de tableau.

50voto

ikegami Points 133140

La première, la seconde n'est pas équivalente pour les deux autres. $#array renvoie le dernier indice du tableau, ce qui est un dernier que la taille de la matrice.

Les deux autres sont pratiquement les mêmes. Vous êtes tout simplement à l'aide de deux moyens différents pour créer un contexte scalaire. C'est une question de lisibilité.

Personnellement, je préfère le suivant:

say 0+@array;          (Represent @array as a number)

Je trouve ça plus clair

say scalar(@array);    (Represent @array as a scalar)

et

my $size = @array;
say $size;

Ce dernier semble tout à fait clair seul comme ça, mais je trouve que la ligne supplémentaire de clarté quand une partie du code. Il est utile pour enseigner ce que l' @array dans un contexte scalaire, et peut-être que si vous souhaitez utiliser $size plus d'une fois.

32voto

Nate C-K Points 3749

Cette fonction retourne la taille en forçant le tableau dans un contexte scalaire, dans lequel il est évalué par sa taille:

print scalar @arr;

C'est une autre façon de forcer le tableau dans un contexte scalaire, puisque c'est d'être assigné à une variable scalaire:

my $arrSize = @arr;

Il obtient l'indice du dernier élément du tableau, c'est donc en fait la taille de moins de 1 (en supposant que les indices commencent à 0, qui est réglable en Perl, même si cela est généralement une mauvaise idée):

print $#arr;

Ce dernier n'est pas vraiment bon à utiliser pour obtenir la taille de la matrice. Il serait utile si vous voulez juste pour obtenir le dernier élément du tableau:

my $lastElement = $arr[$#arr];

Aussi, comme vous pouvez le voir ici, cette construction n'est pas traitée correctement par la plupart des surligneurs syntaxe...

8voto

jhoanna Points 791

Pour utiliser la deuxième manière, ajoutez 1.

 print $#arr + 1; # second way to print array size
 

5voto

dimas Points 41

Exemple:

 my @a = (undef, undef);
my $size = @a;

warn "size: " . $#a;   # size: 1, it's not size
warn "size: " . $size; # size: 2
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X