如何才能获得Perl中哈希的一部分?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

有什么方法可以得到子散列吗?我需要使用散列片吗?

例如:

%hash = ( a => 1, b => 2, c => 3 );

我只想要

%hash = ( a => 1, b => 2 );
提问于
用户回答回答于

散列片返回与键列表关联的值。为了让你改变印记为@散片,并提供键的列表(在这种情况下,"a""b"):

my @items = @hash{"a", "b"};

通常你可以使用引号运算符来产生列表:

my @items = @hash{qw/a b/};

你也可以分配一个散列片,所以如果你想要一个包含另一个散列子集的新散列,你可以说

my %new_hash;
@new_hash{qw/a b/} = @hash{qw/a b/};

许多人将使用地图而不是散列片:

my %new_hash = map { $_ => $hash{$_} } qw/a b/;

从Perl 5.20.0开始,如果你使用%sigil而不是@ sigil,则可以一步获得键和值:

my %new_hash = %hash{qw/a b/};
用户回答回答于

你可能想要组装一个你想要的密钥列表:

my @keys = qw(a b);

然后使用一个循环来生成散列:

my %hash_slice;
for(@keys) {
  $hash_slice{$_} = %hash{$_};
}

或:

my %hash_slice = map { $_ => $hash{$_} } @keys;

(我喜欢的是第二种,但你最喜欢哪一种。)

扫码关注云+社区