2

2番目のVARにハッシュ要素が追加された順序を保持するにはどうすればよいですか?

(ハッシュのハッシュ)

例えば:

use Tie::IxHash;
my %hash;
tie %hash, "Tie::IxHash";
for my $num (0 .. 5){
     $hash{"FirstVal$num"}++;
}
for my $num (0 .. 5){
     $hash{"FirstValFIXED"}{"SecondVal$num"}++;
}
 print Dumper(%hash);

結果をダンプするとき、$VAR14は挿入順序を保持しませんでした。

$VAR1 = 'FirstVal0';
$VAR2 = 1;
$VAR3 = 'FirstVal1';
$VAR4 = 1;
$VAR5 = 'FirstVal2';
$VAR6 = 1;
$VAR7 = 'FirstVal3';
$VAR8 = 1;
$VAR9 = 'FirstVal4';
$VAR10 = 1;
$VAR11 = 'FirstVal5';
$VAR12 = 1;
$VAR13 = 'FirstValFIXED';
$VAR14 = {
           'SecondVal5' => 1,
           'SecondVal4' => 1,
           'SecondVal2' => 1,
           'SecondVal1' => 1,
           'SecondVal3' => 1,
           'SecondVal0' => 1
         };

ある種の操作でその例をだますことができることは知っていますが、私の実際の問題では、要素に番号が付けられていないか、何らかの方法で順序付けできません。ハッシュマルチレベルの順序挿入のための簡単な関数/操作はありますか?

ありがとう、

ヨダール。

4

4 に答える 4

5

Tie::Autotieを見てください。自動生存によって作成された新しいハッシュを自動的に結び付けます。perldocページは、Tie::IxHashを使用した例を示しています。

于 2010-08-30T22:37:01.683 に答える
2

以下のように、追加の「\」が必要です。

print Dumper(\%hash);
于 2013-04-03T16:55:32.147 に答える
0

ハッシュのハッシュを意味しますか?外部ハッシュのすべての値をTie::IxHashに関連付ける必要があります。

use strict;
use warnings;
use Tie::IxHash;
my $hash={};
my $t = tie(%$hash, 'Tie::IxHash', 'a' => 1, 'b' => 2);
%$hash = (first => 1, second => 2, third => 3);
$hash->{fourth} = 4;
print join(', ',keys %$hash),"\n";
my %new_hash=('test'=>$hash);
$new_hash{'test'}{fifth} = 5;
print join(', ',keys %{$new_hash{'test'}}),"\n";
$new_hash{'test'}{fifth}++;
print join(', ',values %{$new_hash{'test'}}),"\n";
于 2010-08-04T15:21:43.060 に答える
-1
foreach my $sortline (sort {$a<=>$b} keys %{$hash->{"first_field"}}){
    my $name;
    # Soultion to touch a Key with keys within it:
    #--------------------------------------------- 
    foreach my $subkey (keys %{$hash->{"first_field"}->{$sortline}})
            {$name = $subkey;}
    #---------------------------------------------
}

この有用な答えは私を助けました。

于 2010-08-09T06:06:01.070 に答える