2009-07-10 8 views

Odpowiedz

61
scalar keys %hash 

lub po prostu

keys %hash 

jeśli jesteś już w kontekście skalarnym, np my $hash_count = keys %hash   lub   print 'bighash' if keys %hash > 1000.

Nawiasem mówiąc, $#array nie znajduje liczby elementów, znajduje ostatni indeks. scalar @array znajduje liczbę elementów.

+0

$ # + 1 - nie będziemy się elementów. Mam na myśli, że za $ # – joe

+1

Ah, widzę. Cóż, nadal zalecałbym 'skalar @ array' ponad' $ # array + 1'. :) – chaos

+0

czy istnieje jakiś szczególny powód dla tej – joe

2

możemy używać jak to też

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

0+(keys %r) 
+0

znalazłem to po wysłaniu w tak – joe

1

The poniżej powróci jeden mniejsza niż liczba klawiszy w swojej hash. Może ci się to podoba, jeśli są przywiązani do $#array -Style robienia rzeczy (lub zwięzłość):

$#{$hash}; 

KRYTYCZNE EDIT:

Trzymaj się ... to jest interesujące. Działa, jeśli chcesz użyć go jako odwołania do tablicy, ale nie, jeśli używasz go na zewnątrz. Więc jest to przydatne, jeśli chcesz uzyskać dostęp do ostatniego klucza swojego hash, pod warunkiem, że masz przypisane klucze jako tablica do temp: Check this out:

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

Ta odpowiedź mnie zaskoczyła, więc wypróbowałem to i ...to nie działa. – dave4420

+0

@Dave: Sprawdź krytyczną edycję powyżej. Dzięki za heads up. – Zaid

+5

@ Zaid: zastąp '$ # {$ hash}' z '-1'. '$ array [-1]' zawsze oznacza ostatni element '@ array' (i' $ array [-2] 'zawsze oznacza drugi do końca, itd.). '$ hash' nie ma związku z'% hash'. W twoim kodzie perl widzi, że używasz nieokreślonej zmiennej jako odwołania do tablicy, więc udaje, że * jest * odwołaniem do tablicy. Spróbuj użyć ostrzeżeń; użyj ścisłego; 'na początku i zobacz, co mówi perl. – dave4420

0

Ale nie po Perl 5.10:

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

# $# is no longer supported 

i gorzej:

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

# -1 
-4

To działa w prosty sposób i dla jakiejkolwiek wielkości hash.

wydrukuj klucze skalarne% hash;

+2

Przepraszam, ale ... jak to się różni od mocno przegłosowanej, zaakceptowanej odpowiedzi, opublikowanej 7 lat temu, innej niż użycie 'print'? –

0

wydrukuj klucze skalarne% hash;

OR 

$ X = klucze% hash; wydrukuj $ X;

(Klawisze skrótu% zwrotu wartości kluczy w kontekście listowym, że dalsze zmiany do kontekście skalarnym (podczas przypisywania do zmiennej skalarnej) .)

Powiązane problemy