If you evaluate a hash in scalar context, it returns false if the hash is empty. If there are any key/value pairs, it returns true; more precisely, the value returned is a string consisting of the number of used buckets and the number of allocated buckets, separated by a slash. This is pretty much useful only to find out whether Perl's internal hashing algorithm is performing poorly on your data set.
To może korzystać z niektórych wyjaśniając dla każdego nieznanego z wewnętrznymi hash: Gdy elementy są dodawane do mieszania, są one ułożone w wiadrach w oparciu o algorytm mieszający, dzięki czemu można je odzyskać więcej wydajnie.
Przykład
Gromadzisz autka. Aby łatwo znaleźć swoje samochody, zdecydowałeś się umieścić je w różnych pojemnikach na podstawie koloru. Masz wiadra dla Red, Żółty, Zielonej, Niebieski i Czarnych kolorowe samochodów.
dodać nową Zieloną Ford Mustang do swojej kolekcji tak to idzie w Zielonej wiadra. Gdy następnym razem będziesz chciał znaleźć ten samochód, możesz przejść bezpośrednio do wiadra Green i wybrać mniejszy fragment do przeszukiwania.
W tym przykładzie kolekcja samochodów to hash
, każdy samochód to hash entry
, a kolor to hashing algorithm
. Ponieważ kolekcja zawiera również czerwone, niebieskie i czarne samochody, są one rozmieszczone dość sprawnie, przy użyciu 4/5
z wiader.
Jeśli jednak używałbyś tego systemu do zbierania czerwonych samochodów, algorytm mieszający byłby bardzo nieefektywny. Używałby on tylko jednego kubka, a znalezienie konkretnego samochodu wymagałoby przeszukiwania całej kolekcji.
Należy pamiętać, że przypisano tu jeden klucz z referencją i bez wartości. Umieszczenie zawartości skrótu w nawiasach klamrowych ('{' i '}') przypisuje _hash reference_, a nie hash. Deklarujesz hash i przekazujesz mu _hash reference_. Więc nigdy nie dostaniesz więcej niż jednego wiadra wypełnionego. –
To jest bardzo dobre pierwsze pytanie. Dobra robota! – simbabque