Perl Tie::IxHash - 有 'each' 方法吗?

标签 perl hash each tie

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/

相关文章:

c# - MVC - 如何哈希和加盐

javascript - 有人可以解释为什么这个测试显示 jquery $.each 比原生更快吗?

Jquery每一个问题

jquery - 使用关联数组获取 $.each 中的迭代

perl - 我怎样才能将不同种类的 Perl 测试分开,这样我就不必全部运行它们了?

linux - Perl 中的这个命令有什么作用?

node.js - 我可以加密一个字符串,以便可以在可计算的时间内破解它吗?

swift - 通过散列值访问 Swift 集合元素

arrays - Perl一个数组的所有排列

perl - 如何在 Perl 中将日期转换为所需格式?