我有一個內部數組的樣本散列,但它似乎是我訪問數組元素的錯誤。我這樣做:Perl:如何訪問散列中的數組
%Hash_Object = (
"Property1","value-1",
"Property2",("value-2","value-3")
);
print $Hash_Object{Property2}[1];
#blank output!
它應該打印出「價值-3」,但它沒有。
我有一個內部數組的樣本散列,但它似乎是我訪問數組元素的錯誤。我這樣做:Perl:如何訪問散列中的數組
%Hash_Object = (
"Property1","value-1",
"Property2",("value-2","value-3")
);
print $Hash_Object{Property2}[1];
#blank output!
它應該打印出「價值-3」,但它沒有。
你不必在你的哈希的數組。你有一個列表。請注意以下事項:
如果你把一個數組列表,它將被視爲另一個列表,並且列表是扁平:
(1, 2, (3, 4, 5), (6, (7)))
等於
(1, 2, 3, 4, 5, 6, 7)
如果你想構建更復雜的數據結構,你需要使用引用。有兩種方法可供參考。您可以通過使用\
這樣
my @foo = qw(a b c);
my $ref = \@foo;
或直接構建爲一個匿名引用,你然後將分配給一個變量引用變量。
my $ref = [ qw(a b c) ];
my $ref2 = [ 1, 2, 3 ];
要製作哈希引用,請使用大括號{}
。
my $ref = { a => 1, b => 2 };
引用是標量值,所以它們本身就是一個單一的值。這就是爲什麼你需要解引用他們,以達到其中其中的值(其實它不在裏面,它是引用)。
%Hash_Object = (
"Property1","value-1",
"Property2",["value-2","value-3"]
);
$Hash_Object{Property2}[1];
$Hash_Object{Property2}->[1]; # or like this with ->
你已經知道如何做到這一點。您還可以在每個新的解除引用之前使用->
運算符。有些人發現更清晰的閱讀。
欲瞭解更多信息,請參閱perlreftut和perlref以及Mike Friedman's excellent blog post about lists and arrays。
你的例子不是很好寫的代碼。這是一些改進。
=>
哈希分配""
如果你不插my
聲明一個新的變量my %example = (
Property1 => 'value-1',
Property2 => [
'value-2',
'value-3',
],
);
數組值應該是在方括號中,由於simbabque
%Hash_Object = (
"Property1","value-1",
"Property2",["value-2","value-3"]
);
print $Hash_Object{Property2}[1];
「數組值應該放在方括號中」 - 當然,只有當您想要引用該數組時(在這種情況下您會這樣做,因爲您正在構建複雜的數據結構)。 –
始終使用使用警告;和使用嚴格;在程序的頂部。
如果您使用此它顯示了以下錯誤
Odd number of elements in hash assignment at array.pl line 3.
Can't use string ("value-2") as an ARRAY ref while "strict refs" in use at array.pl line 8
在Perl,其中單是壓扁在一起。
所以第一誤差是
Odd number of elements in hash assignment at array.pl line 3
哈希必須具有對鍵和值的。所以哈希的元素不應該是奇數。
你的代碼應該是
use warnings;
use strict;
my %Hash_Object = (
"Property1"=>["value-1"],
"Property2"=>["value-2","value-3"]
);
print $Hash_Object{Property2}[1];
時,你不必在你的哈希的數組。你有一個列表。我正在尋找一個有很好解釋的副本。同時,您需要在散列分配中使用'[]'。 – simbabque
相關但不重複:http://stackoverflow.com/q/40044519/1331451 – simbabque
'%Hash_Object =( 「Property1」,「value-1」, 「Property2」,[「value-2」,「值-3「] );' – ssr1012