2009-10-03 96 views
3

我有一個現有的數組,我希望將其添加爲散列值。我知道你可以使用數組作爲值,但是看不到分配現有數組的方法。我基本上想去:如何使用現有數組作爲Perl中的哈希值?

$hash{fieldName} = @myArray; 

只有這顯然不工作!幫助讚賞!

+1

Data Structures Cookbook在處理數據結構方面有很多很好的信息。有大量的創建,存儲和訪問數據的例子。 http://perldoc.perl.org/perldsc.html – daotoad 2009-10-04 06:20:29

回答

12

只能在散列/數組中存儲標量值。您需要使用:

​​

來存放它,並且:

my @myOtherArray = @{$hash{fieldName}}; 

把它找回來。它通過使用對數組的引用來解決標量需求。

+0

你也可以用'$ hash {fieldName} [$ index]' – friedo 2009-10-03 23:20:21

+1

@friedo來訪問單個元素 - 我想你的意思是'$ hash {fieldName} - > [$ index]' – 2009-10-04 13:48:39

+0

@joe,' - >'是不需要的。查看perldsc中的示例。 – daotoad 2009-10-04 19:50:53

4

您可以參考存儲使用反斜槓操作符「\」例如

$hash{fieldName} = \@myArray 

然後,您可以使用以下方法來訪問數組:

@{$hash{fieldName}} 
6

而且因爲沒有人提到這個問題,你的代碼沒有結果如下:

  • 因爲你分配給哈希的元素時,任務是在標量上下文

  • 在標量上下文

    ,陣列的值成爲該陣列的尺寸

  • 左右,$hash{fieldName}值變得等於陣列(scalar @myarray

的大小
+0

思南 - 感謝編輯! – 2009-10-03 18:03:38

5

雖然正確的答案確實是存儲參考,但有時候\@myArray,[ @myArray ](淺拷貝)和dclone(深拷貝)之間的區別很重要。

如果有,$hash{fieldName} = \@myArray,然後$hash{fieldName}->[2]將修改@myArray的第三個元素。如果@myArray本身不包含任何引用,則存儲淺拷貝將幫助您避免該行爲。