Как узнать, есть ли в хеше хотя бы один ключ - PullRequest
2 голосов
/ 03 августа 2020

Есть такая ха sh:

$hash = { Apple => 'red', Lemon => 'yellow', Carrot => 'orange' }

Как узнать, есть ли хоть один ключ в ha sh?

Ответы [ 4 ]

3 голосов
/ 03 августа 2020

Достаточно просто использовать ha sh в скалярном контексте.

if (%hash) {         # Or %$hash in your case.
   say "Not empty";
} else {
   say "Empty";
}

%hash vs keys(%hash)

  • keys(%hash) в скалярном контексте: возвращает количество элементов.
  • %hash в скалярном контексте (≥5,26): возвращает количество элементов.
  • %hash в скалярном контексте (<5,26): возвращает, является ли ha sh пустым или нет. </li>

Итак независимо от версии, вы всегда можете просто использовать %hash в скалярном контексте, чтобы проверить, является ли ha sh пустым. keys(%hash) можно использовать для достижения того же результата, но %hash в логическом контексте (например, if (%hash)) было быстрее, чем эквивалентное использование keys(%hash) с 5.12.

Итак, независимо от версии, вы всегда можете просто использовать keys(%hash) в скалярном контексте, чтобы получить количество элементов в ha sh. Вы также можете использовать %hash в скалярном контексте в более новых версиях.

1 голос
/ 05 августа 2020

Вышеупомянутые методы хороши. Но если вам нужна дополнительная информация о ha sh, вы можете использовать модуль https://metacpan.org/pod/Hash :: Util .

bucket_info метод: возвращает набор базовых c информации о ha sh.

  • 0: количество ключей в га sh
  • 1: количество ковшей в га sh
  • 2: количество использованные корзины в ha sh
  • rest: список подсчетов, K-й элемент - это количество корзин с ключами K.

Код

use strict;
use warnings;
use Hash::Util qw(bucket_info);

my $hash = { Apple => 'red', Lemon => 'yellow', Carrot => 'orange' };
my $empty_hash = {};

my ($keys, $buckets, $used, @length_counts)= bucket_info($hash);

print "\n Number of keys $keys in the hash \n";
print "\n Number of buckets $buckets in the hash \n";
print "\n Number of used buckets $used in the hash \n";

((bucket_info($hash))[0]) ? print "\n Not Empty hash" : print "\n Empty hash";

((bucket_info($empty_hash))[0]) ? print "\n Not Empty hash" : print "\n Empty hash";

вывод

Number of keys 3 in the hash

 Number of buckets 8 in the hash

 Number of used buckets 2 in the hash

 Not Empty hash
 Empty hash
1 голос
/ 03 августа 2020

Ha sh возвращает не ложное значение в скалярном контексте при заполнении или пары ключ-значение в контексте списка.

Вы можете просто проверить, не пусто ли оно, с помощью,

if (%$hash)... 
1 голос
/ 03 августа 2020

Вы можете определить размер ключа ha sh, используя: scalar keys(%hash). В зависимости от размера вашего чека можно сделать следующее:

#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

my %hash = ( 
    Apple  => 'red', 
    Lemon  => 'yellow', 
    Carrot => 'orange'
);

print Dumper(\%hash);

print "Size:".scalar keys(%hash)."\n";

if(scalar keys(%hash) > 0){
    print "Hash size is greater than 1\n";
} else {
    print "Hash size is zero\n";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...