2010-08-04 91 views
2

如何保存散列元素的添加順序 對於第二個VAR?Tie :: IxHash在哈希哈希中排序關聯數組?

(哈希值的哈希值)

例如:

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 
     }; 

我知道我可以用一些排序操作來欺騙這個例子,但在我真正的問題中,這些元素沒有編號,或者無法排序。 是否有任何簡單的函數/操作散列多級順序插入?

謝謝,

Yodar。

+1

這看起來像Dumper輸出。如果是這種情況,那麼'$ VAR1'就是*字符串*'FIRSTVAL'。請顯示可以轉儲的代碼。這看起來不像IxHash內部。 – Axeman 2010-08-04 15:14:39

回答

-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;} 
    #--------------------------------------------- 
} 

This有用的答案幫助了我。

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"; 
+2

但是在你的例子中你只有一個叫'tie'的電話。 – cjm 2010-08-04 16:45:27

5

看看Tie::Autotie。它會自動綁定由自動版本創建的新哈希。 perldoc頁面顯示了一個使用Tie :: IxHash的例子。

2

您需要額外的「\」,如下所示。

print Dumper(\%hash);