2

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

...理由はまだはっきりしていません。

eachタイドハッシュで達成する方法を提案できる人はいますか?

4

1 に答える 1

6

Tie::IxHashメソッドはありませんが、タイドハッシュでEachPerlの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($_));
    ...
}
于 2013-02-15T01:17:49.880 に答える