2010-06-04 8 views

Respuesta

49
my $arr_ref = [qw(Field3 Field1 Field2 Field5 Field4)]; 
my ($last_arr_index, $next_arr_index); 

Si necesita conocer el índice real del último elemento, por ejemplo, que necesita para recorrer los elementos del array conocer el índice, utilice $#$:

$last_arr_index = $#{ $arr_ref }; 
$last_arr_index = $#$arr_ref; # No need for {} for single identifier 

Si necesita saber el índice del elemento después de la última, (por ejemplo, para completar el siguiente elemento libre sin push()),

O necesita saber la cantidad de elementos en la matriz (que es el mismo número) que el anterior:

my $next_arr_index = scalar(@$arr_ref); 
$last_arr_index = $next_arr_index - 1; # in case you ALSO need $last_arr_index 
# You can also bypass $next_arr_index and use scalar, 
# but that's less efficient than $#$ due to needing to do "-1" 
$last_arr_index = @{ $arr_ref } - 1; # or just "@$arr_ref - 1" 
    # scalar() is not needed because "-" operator imposes scalar context 
    # but I personally find using "scalar" a bit more readable 
    # Like before, {} around expression is not needed for single identifier 

Si lo que realmente se necesita es acceso el último elemento de la arrayref (por ejemplo, el solo razón por la que desea saber si el índice es para usar posteriormente ese índice para acceder al elemento), simplemente puede usar el hecho de que el "-1" hace referencia al último elemento de la matriz. Apoyos a la publicación de Zaid para la idea.

$arr_ref->[-1] = 11; 
print "Last Value : $arr_ref->[-1] \n"; 
# BTW, this works for any negative offset, not just "-1". 
+0

Gracias DVK. Eso es exactamente lo que estaba pensando cuando escribí mi respuesta. – Zaid

12
my $last_aref_index = $#{ $arr_ref }; 
+0

Gracias friedo. Esto es lo que estaba buscando. – Sachin

+6

Recuerde "aceptar" la respuesta que le pareció más útil. –

5

La razón es probable que necesite para acceder al último índice es conseguir que el último valor de la referencia de matriz.

Si ese es el caso, simplemente puede hacer lo siguiente:

$arr_ref->[-1]; 

Los -> desreferencias operador. [-1] es el último elemento de la matriz.

Si necesita contar la cantidad de elementos en la matriz, no es necesario que haga $#{ $arr_ref } + 1. DVK ha mostrado a couple of better ways para hacerlo.

+0

Pero eso le da el valor del último elemento, no su índice. – friedo

+0

Sí, pero ¿por qué otra cosa querría el último índice? Califiqué mi respuesta en consecuencia. – Zaid

+2

Podemos requerirlo my $ hash_ref = {map {$ arr_ref -> [$ _] => $ _} 0 .. $ # {$ arr_ref}}; – Sachin

0
my $arr_ref = [qw(Field3 Field1 Field2 Field5 Field4)]; 

my $last_aref_index = $$arr_ref[$#{$arr_ref}]; 
print "last element is: $last_aref_index\n"; 
+0

en el futuro, es posible que desee utilizar el formato del código (identifique por 4 espacios o haga clic en el botón "código" en el editor) – DVK

+0

gracias. También es posible que desee leer la pregunta con más cuidado, ya que mi ejemplo arroja "Field4" en oposición al índice # ... jw – jason

Cuestiones relacionadas