我想這裏可能會有一些困惑(無論是由你,還是由我,我都不知道是哪個)。
這一切都取決於你想要什麼你的最終數據結構的樣子。我相信你在找什麼就是與哈希%的關鍵「一」關聯的值是兩個元素,其中的每一個本身數組引用,像這樣的數組引用:
# We'll call this "STRUCT-ONE"
%hash = (
'one' => [
['apple', 'banana', 'orange'],
['banana', 'orange','papaya','cherry'],
],
);
。 ..或者,也許你代替打算爲了有僅一個數組引用作爲值,如下所示:
# Let's call this "STRUCT=TWO"
%hash = (
'one' => [
['apple', 'banana', 'orange', 'banana', 'orange','papaya','cherry'],
],
);
的語法來填充每個這些結構的,這取決於上述你將是不同尋找。
對於每一個結果,你會初始化值的方法相同:
my %hash =();
my @array1= ('apple', 'banana', 'orange');
my @array2 =('banana', 'orange','papaya','cherry');
...,並且對於 「STRUCT-ONE」,你會寫是這樣的:
$hash{'one'} = [];
push(@{$hash{'one'}}, [@array1]);
push(@{$hash{'one'}}, [@array2]);
。 ..或者這些最後兩行可以像這樣組合:
push(@{$hash{'one'}}, [@array1], [@array2]);
或者,對於上面的「STRUCT-TWO」,您可以更改th是:
push(@{$hash{'one'}}, @array1, @array2);
(請注意,我簡單地除去的「[]」匿名數組引用語法)。你會注意到我使用'[@ array1]'來創建一個新的匿名數組引用(並用現有數組的內容填充它(基本上是執行數組內容的一個副本) )),而不是使用反斜槓採取參照現有陣列「\ @ ARRAY1」。您選擇哪個選項取決於您的真正意圖。我選擇了前者,這樣你就有了一個獨立的數據結構(所以@ array1或@ array2的進一步修改不會影響你的%hash內容。但是,如果你有一個非常大的數組,並且不想複製它內存(你知道內容真的是不可變的),然後參考現有的數組可能是一個更好的選擇。
最後,我建議使用Data::Dumper作爲診斷工具來檢查你的數據結構實際上像(即,或明智地使用了Perl debugger的(如果你熟悉如何使用))
我希望幫助
非常感謝。那件事真的幫了我很多。 我正在使用Dumper來檢查我的錯誤。 :) –