我有一个内部数组的样本散列,但它似乎是我访问数组元素的错误。我这样做: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