2010-06-04 8 views

Antwort

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

Wenn Sie die tatsächliche Index des letzten Elements wissen müssen, zum Beispiel müssen Sie die Elemente des Arrays in einer Schleife über den Index zu kennen, verwenden $#$:

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

Wenn Sie müssen kenne den Index des Elements nach dem letzten, (z. B. um das nächste freie Element ohne push() zu füllen),

ODER Sie müssen wissen, wie viele Elemente in das Array (die die gleiche Zahl ist), wie oben:

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 

Wenn das, was Sie tatsächlich benötigen ist Zugang das letzte Element in der ArrayRef (z Die nur Grund, dass Sie wissen möchten, dass der Index später diesen Index verwendet, um auf das Element zuzugreifen), können Sie einfach die Tatsache verwenden, dass "-1" Index auf das letzte Element des Arrays verweist. Stützen auf Zaids Post für die Idee.

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

Dank DVK. Genau das habe ich mir gedacht, als ich meine Antwort niedergeschrieben habe. – Zaid

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

Danke friedo. Das ist, was ich gesucht habe. – Sachin

+6

Denken Sie daran, die Antwort zu akzeptieren, die Sie am hilfreichsten fanden. –

5

Der Grund, warum Sie wahrscheinlich den letzten Index zugreifen müssen, ist den letzten Wert in der Array-Referenz zu erhalten.

Wenn das der Fall ist, können Sie einfach wie folgt vor:

$arr_ref->[-1]; 

Die -> Betreiber Dereferenzierungen. [-1] ist das letzte Element des Arrays.

Wenn Sie die Anzahl der Elemente im Array zählen müssen, müssen Sie $#{ $arr_ref } + 1 nicht ausführen. DVK hat a couple of better ways gezeigt, um es zu tun.

+0

Aber das gibt Ihnen den Wert des letzten Elements, nicht seinen Index. – friedo

+0

Ja, aber warum sonst sollte man den letzten Index haben? Ich habe meine Antwort entsprechend qualifiziert. – Zaid

+2

Wir können es erfordern mein $ hash_ref = {Karte {$ 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

in der Zukunft möchten Sie möglicherweise die Code-Formatierung (Ident durch 4 Leerzeichen oder klicken Sie auf "Code" -Taste im Editor) – DVK

+0

danke. Ich möchte auch die Frage genauer lesen, da mein Beispiel "Field4" im Gegensatz zum Index # ... jw zurückgibt – jason

Verwandte Themen