2009-07-10 11 views

Antwort

61
scalar keys %hash 

oder nur

keys %hash 

, wenn Sie bereits in einem skalaren Kontext sind, z.B. my $hash_count = keys %hash   oder   print 'bighash' if keys %hash > 1000.

Übrigens findet $#array nicht die Anzahl der Elemente, es findet den letzten Index. scalar @array findet die Anzahl der Elemente.

+0

# $ + 1 - wir werden keine Elemente erhalten. Ich meine das für $ # – joe

+1

Ah, ich verstehe. Nun, ich würde immer noch 'scalar @ array' über' $ # array + 1' empfehlen. :) – chaos

+0

gibt es einen bestimmten Grund dafür – joe

2

wir wie dieses zu

my $keys = keys(%r) ; 
print "keys = $keys" ; 

0+(keys %r) 
+0

Ich fand dies nach in so geschrieben – joe

1

der folgenden weniger zurückkehren können, dass die Anzahl der Schlüssel in der Hash. Sie können es mögen, wenn Sie gern die $#array -Stil, Dinge zu tun (oder Prägnanz) sind:

$#{$hash}; 

KRITISCH EDIT:

Halten Sie auf ... das ist interessant. Es funktioniert, wenn Sie es als eine Array-Referenz verwenden möchten, aber nicht, wenn Sie es außerhalb verwenden. So nützlich es ist, wenn Sie die letzte Taste Ihrer Hash zugreifen möchten, vorausgesetzt, dass Sie Ihre Schlüssel als ein Array in ein temporäres zugewiesen haben: Check this out:

%hash = ("barney" => "dinosaur", "elmo" => "monster"); 
@array = sort {$a cmp $b} keys %hash; 
print $array[$#{$hash}]; 
# prints "elmo" 
+1

Diese Antwort hat mich überrascht, also habe ich es ausprobiert und ...es funktioniert nicht. – dave4420

+0

@Dave: Überprüfen Sie die kritische Bearbeitung oben. Danke für die Köpfe hoch. – Zaid

+5

@Zaid: Ersetze '$ # {$ hash}' mit '-1'. '$ array [-1]' bedeutet immer das letzte Element von '@ array' (und' $ array [-2] 'bedeutet immer das zweitletzte, usw.). '$ hash' ist nicht verwandt mit'% hash'. In Ihrem Code sieht Perl, dass Sie eine undefinierte Variable als Array-Referenz verwenden. Sie gibt also vor, dass es * eine Array-Referenz ist. Probiere 'Warnungen verwenden; Benutze strict; 'am Anfang und schau was Perl dann sagt. – dave4420

0

Aber nicht nach Perl 5.10:

use feature ":5.10"; 
my %p =(); 
say $#%p; 

# $# is no longer supported 

und schlimmer:

use feature ":5.10"; 
my %p = (a=>1, b=>2, c=>3); 
say $#{%p}; 

# -1 
-4

Dies wird in der einfachen Weise arbeiten und für jede Größe eines Hash.

skalare Schlüssel drucken% hash;

+2

Tut mir leid, aber ... wie unterscheidet sich das von der stark aufgestuften, akzeptierten Antwort, die vor 7 Jahren gepostet wurde, außer mit 'print'? –

0

skalare Schlüssel drucken% hash;

OR 

$ X = Schlüssel% hash; drucken $ X;

(Keys% hash den Wert des Schlüssels in der Liste Zusammenhang, dass weitere Änderungen in den Skalarkontext zurückkehren (wenn auf skalaren Variablen zugewiesen wird) .)

Verwandte Themen