2012-02-25 14 views
44

Korzystam z następującego kodu, aby sprawdzić, czy skrót jest pusty. Czy istnieje lepsza metoda i czy można jej bezpiecznie używać?jak sprawdzić, czy hash jest pusty w perlu

if (!keys %hash) { print "Empty";} 
+6

Jeśli uważasz, że Twoje pytanie zostało odebrane, powinieneś zaakceptować odpowiedź, klikając znacznik wyboru po lewej stronie. – TLP

Odpowiedz

77
if (%hash) 

będzie działać dobrze.

Od perldoc perldata:

Jeśli oceniać mieszania w kontekście skalarnym, zwraca false, jeśli hash jest pusty. Jeśli są jakieś pary klucz/wartość, to zwraca true; dokładniej, zwracana wartość jest ciągiem składającym się z liczby użytych wiaderek i liczby przydzielonych wiader, oddzielonych przecinkiem .

+2

Wydaje się znacznie wolniejsze niż 'klucze% hash'. – choroba

17

Prostsze:

if (!%hash) { 
    print "Empty"; 
} 

! narzuca kontekst skalarny i hash oceniana w kontekście skalarnym zwraca:

  • false czy są zerowe klawisze (nie zdefiniowane w dokumentacji, ale eksperymentalnie zwraca 0

  • ciąg oznaczający ile używany/przydzielane wiadra są używane przez> 0 kluczy, który będzie oczywiście NIE fałszywe (np „3/6”)

+0

Nie nie zwraca '' false "', co byłoby prawdziwą wartością. Zwraca zero. – Borodin

+0

@Borodin - błędne cytaty. Naprawiony – DVK

20

było a bug który spowodował związane mieszań w kontekście skalarnym zawsze return false. Błąd był fixed in 5.8.5. Jeśli obawiasz się kompatybilności wstecz, to wracam do niej z if(!keys %hash). W przeciwnym razie użyj polecenia if(!%hash) zgodnie z zaleceniami innych osób.

1

"Lepsze" to termin subiektywny. Jednak twierdzę, że kod, który jest łatwiejszy do zrozumienia, można określić jako "lepszy". Z tego powodu wnioskuję, że !keys %hash jest lepszy, ponieważ wszyscy piszący kod perl będą wiedzieli, co ten kod robi i działa. !%hash jest co najmniej musiałem spojrzeć w górę, aby upewnić się, czy to naprawdę działa, czy tylko wygląda, jakby to działało. (Powodem jest to, że zwracana wartość skrótu w kontekście skalarnym jest dość myląca, a zachowanie tablic w kontekście skalarnym jest dobrze znane i często używane.)

Zapisano także !keys %hash.

Więc nie, nie ma lepszego ani oszczędzającego sposobu sprawdzenia, czy skrót jest pusty.

Powiązane problemy