Dav*_*ave 9 syntax perl hashtable
是否有一种简单的方法来声明具有多个键的散列,这些键都指向perl中的相同值?
这是类似于我正在寻找的东西(我实际上不知道这是否有效):
my $hash = {
a, b, c => $valA,
d, e, f => $valB
};
Run Code Online (Sandbox Code Playgroud)
这样....
print $hash->{a}; #prints $valA
print $hash->{b}; #prints $valA
print $hash->{c}; #prints $valA
print $hash->{d}; #prints $valB
print $hash->{e}; #prints $valB
print $hash->{f}; #prints $valB
Run Code Online (Sandbox Code Playgroud)
Rob*_*ert 20
你可以这样写:
my %hash;
$hash{$_} = $valA for qw(a b c);
$hash{$_} = $valB for qw(d e f);
Run Code Online (Sandbox Code Playgroud)
Hen*_*olm 12
不,没有简单的语法.(实际上,=>记录为别名,,其唯一的形式效果是即使在严格模式下它也允许在其左边使用裸字).
如果没有定义自己的潜艇,你可以做的最好的事情可能是这样的
@hash{qw(a b c)} = ($valA) x 3 ;
@hash(qw(d e f)} = ($valB) x 3 ;
Run Code Online (Sandbox Code Playgroud)
bri*_*foy 10
我喜欢在一侧使用哈希切片而在另一侧使用列表复制运算符.我使用keys数组的标量值来确定要复制的值的数量:
@hash{ @keys } = ($value) x @keys;
Run Code Online (Sandbox Code Playgroud)
没有内置语法,但您可以随时编写自己的语法:
my $value = sub {map {$_ => $_[1]} @{$_[0]}};
my $hash = {
[qw(a b c)]->$value('valA'),
[qw(d e f)]->$value('valB'),
};
say join ', ' => map "$_: $$hash{$_}", sort keys %$hash;
# a: valA, b: valA, c: valA, d: valB, e: valB, f: valB
Run Code Online (Sandbox Code Playgroud)
如果你想这是做了很多,你可能想看看Hash::Util的hv_store功能,它允许您加载多个键具有完全相同的内存位置.
| 归档时间: |
|
| 查看次数: |
6103 次 |
| 最近记录: |