创建仅包含键的哈希表

4

在 PERL 哈希中,只能推入键吗?也就是说,可以创建没有对应值的哈希吗?

我想创建一个行为类似于数组的哈希表,即仅具有键而没有相应值。下面是示例:

my %feedHash;
while(<CFG>)
{
    chomp($_);
    my @val=split(/:/,$_);
    chomp($val[0]);
    my $feedId=$val[0];
    if(!exists $feedHash{$feedId})
    {
      print "\n$feedId Feed is not present";
      $hash{$feedId} = undef;
      mkdir "LoadReports/$feedId" or die $!;                    
    }
    else
    {
       print '\nFeed is already present';
    }
}

它显示“Feed is not present”的消息,即使在循环中第二次使用相同的Feed ID。

只需将值设置为 undef:这将使哈希(映射)很好地模拟集合。 - user2864740
2个回答

7
您可以使用您的键制作哈希表,其中值设置为 undef
my %hash;
@hash{qw(key1 key2 key3)} = ();

检查/设置特定的哈希键:

if (!exists $hash{key4}) { $hash{key4} = undef } 

我正在编写一个简单的代码,想要检查哈希表中是否存在某个键。如果不存在,则只需将该键添加到哈希表中即可。 - user3732491
@user3732491 使用$feedHash{$feedId} = undef;代替$hash{$feedId} = undef; - mpapec
如果这个回答对你有用,@user3732491 你可以接受它。 - mpapec

2

你需要的是一个类似于%seen的哈希表。

不给哈希表赋予真正的布尔值并没有任何好处,反而会增加额外的麻烦。因此,我建议你将代码编写成以下样式:

my %seen_feed;

while (<CFG>) {
    chomp;
    my ($id, @vals) = split ':';

    if (! $seen_feed{$id}++) {
        print "\n$id Feed is not present";
        mkdir "LoadReports/$id" or die $!;
    } else {
       print '\nFeed is already present';
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接