Tie::IxHash 生成一个对象,该对象具有作为数组和散列的大部分行为集。但是我没有找到与返回(键,值)对的 each
函数等效的函数。
我刚刚忽略了吗?
如果我必须自己动手,我会认为这样的方法会起作用:
use Tie::IxHash;
$t = Tie::IxHash->new( a,1,b,2,c,3 );
while (($x1, $x2) = map { $_ => $t->Values($_) } $t->Keys ) { say "$x1 => $x2"; }
但输出是一个无限系列的
a => 1
...出于我还不清楚的原因。
有人可以建议如何使用绑定(bind)哈希实现 each
吗?
最佳答案
Tie::IxHash
没有 Each
方法,但您可以在绑定(bind)哈希上使用 Perl 的 each
函数:
use Tie::IxHash;
my $t = tie my %hash, 'Tie::IxHash';
@hash{qw/a b c d e/} = (1, 2, 3, 4, 5);
# using the tied hash
while (my ($key, $val) = each %hash) {
print "$key => $val\n";
}
# using the OO interface (interchangeably)
foreach my $key ($t->Keys) {
my $val = $t->FETCH($key);
print "$key => $val\n";
}
请注意,$t->Values($key)
将不起作用。此方法需要索引而不是键。这将起作用:
foreach (0 .. $t->Length - 1) {
my ($key, $val) = ($t->Keys($_), $t->Values($_));
...
}
关于Perl Tie::IxHash - 有 'each' 方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14886259/