2011-05-14 49 views
1

我可以在Perl中創建二維數組。哈希的二維數組有多不同?爲什麼在我們可以使用數組模擬哈希特性時,在Perl中散列一個原始數據結構?來自Perl的數組與Perl有何不同?

+0

沒有2d數組,有數組數組 – Toto 2011-05-14 10:15:46

+0

有PDL中的2D數組,但我知道這不是OP的意思。 (它們也僅用於數字) – 2011-05-14 18:03:31

+0

您也可以使用散列來模擬數組,但如果數組不是任何原始數據類型,它不會讓任何人更好。 – mob 2011-05-14 19:04:18

回答

0

在構建多種類型的對象時,new方法可以傳遞一個參數列表,它可能顯示爲一個散列,但它確實只是一個數組,每個偶數都是一個鍵,每個奇數都是一個值。

my $obj = Some::New::Class->new(
    name => 'Sam', 
    age => 0, 
    email => '[email protected]' 
); 

這是等同於:

my $obj = Some::New::Class->new(
    'name', 'Sam', 
    'age', 0, 
    'email', '[email protected]' 
); 

你可以,但是,指示新的(),以尋找一個哈希,這似乎更像是:

my $obj = Some::New::Class->new({ 
    name => 'Sam', 
    age => 0, 
    email => '[email protected]' 
}); 

如果這不回答你的問題,我希望我至少提供一些見解。

+0

在上一個例子中,你正在傳遞一個*引用*到一個散列中,而不是一個散列:所以在new()的實現中引用它的代碼將有所不同。 (你可能知道,但只是爲了澄清。) – AAT 2011-05-17 10:37:40

6

也許你的意思是你可以有一個這樣的數據結構:

my $array_hash = [ 
    [ "key1", "value1" ], 
    [ "key2", "value2" ], 
]; 

對於小型數據這個效果很好,但考慮到這樣的陣列有大約1000個條目的情況。然後,要通過鍵找到特定條目,您必須搜索整個數組,這很慢。

原始散列類型允許快速查找,這正是它的用途。

哈希表內置於Perl中的另一個原因是它們是有用的數據結構,因此並非每個程序員都需要實現自己的。