打印数组数组的散列内容
Printing content of hash of arrays of arrays
我一直在尝试阅读 Perl 中的以下结构:
my %Homes = (
"Home 1" => [
'TYPE_OF_HOUSE' => "Villa",
'FIELD1' => ["1","2","3"],
'Field2' => ["2","3","4"],
'Field3' => ["3","4","5"],
],
"Home 2" => [
'TYPE_OF_HOUSE' => "Duplex",
'FIELD1' => ["1","2","3"],
'Field2' => ["2","3","4"],
'Field3' => ["3","4","5"],
],
"Home 3" => [
'TYPE_OF_HOUSE' => "Apartment",
'FIELD1' => ["1","2","3"],
'Field2' => ["2","3","4"],
'Field3' => ["3","4","5"],
],
);
通过使用以下内容:
my @data_Array;
my ($inner_Key,$key,$names_ref);
foreach $key (keys %Homes)
{
print("Inner values of house $key are:");
foreach $inner_Key ( @{$Homes{$key}})
{
if ($inner_Key != "TYPE_OF_HOUSE")
{
$names_ref = \@$inner_Key;
@data_Array = @{$names_ref};
print($data_Array[0]);
print($data_Array[1]);
print($data_Array[2]);
}
else
{
print($inner_Key);
}
}
}
我成功地打印了:“Home 1”、“Home 2”,但是在尝试读取内部内容时,尽管我使用了对数组的引用,但并不顺利。我错过了什么?我的目标是“识别”字段的类型,如果它是 TYPE_OF_HOUSE
,则简单地打印它,因为它不是数组。否则,打印其数组的内部内容。
您必须使用 strict
和 warnings
,因为它们会告诉您很多有关代码错误的信息。
比较字符串时需要使用ne
而不是!=
。
您应该使用不同的数据结构来简化访问内部数据元素的过程。你有一个数组哈希,但它作为哈希哈希更有意义。通过将 =>
用于 'TYPE_OF_HOUSE' => "Villa"
,您已经欺骗自己相信这是一个散列。然而,它只是一个平面阵列。数组的第一个元素是 TYPE_OF_HOUSE
,第二个元素是 Villa
,第三个是 FIELD1
,第四个是数组引用,等等
use warnings;
use strict;
my %Homes = (
"Home 1" => {
'TYPE_OF_HOUSE' => "Villa",
'FIELD1' => [ "1", "2", "3" ],
'Field2' => [ "2", "3", "4" ],
'Field3' => [ "3", "4", "5" ],
},
"Home 2" => {
'TYPE_OF_HOUSE' => "Duplex",
'FIELD1' => [ "1", "2", "3" ],
'Field2' => [ "2", "3", "4" ],
'Field3' => [ "3", "4", "5" ],
},
"Home 3" => {
'TYPE_OF_HOUSE' => "Apartment",
'FIELD1' => [ "1", "2", "3" ],
'Field2' => [ "2", "3", "4" ],
'Field3' => [ "3", "4", "5" ],
},
);
my @data_Array;
my ( $inner_Key, $key, $names_ref );
foreach $key ( keys %Homes ) {
print("Inner values of house $key are:");
print "\n";
foreach $inner_Key ( keys %{ $Homes{$key} } ) {
if ( $inner_Key ne "TYPE_OF_HOUSE" ) {
@data_Array = @{ $Homes{$key}{$inner_Key} };
print( $data_Array[0] );
print "\n";
print( $data_Array[1] );
print "\n";
print( $data_Array[2] );
print "\n";
}
else {
print($inner_Key);
print "\n";
}
}
}
我用 perltidy
来改进缩进。我添加了换行符以使您的 print
输出更易于阅读。
我一直在尝试阅读 Perl 中的以下结构:
my %Homes = (
"Home 1" => [
'TYPE_OF_HOUSE' => "Villa",
'FIELD1' => ["1","2","3"],
'Field2' => ["2","3","4"],
'Field3' => ["3","4","5"],
],
"Home 2" => [
'TYPE_OF_HOUSE' => "Duplex",
'FIELD1' => ["1","2","3"],
'Field2' => ["2","3","4"],
'Field3' => ["3","4","5"],
],
"Home 3" => [
'TYPE_OF_HOUSE' => "Apartment",
'FIELD1' => ["1","2","3"],
'Field2' => ["2","3","4"],
'Field3' => ["3","4","5"],
],
);
通过使用以下内容:
my @data_Array;
my ($inner_Key,$key,$names_ref);
foreach $key (keys %Homes)
{
print("Inner values of house $key are:");
foreach $inner_Key ( @{$Homes{$key}})
{
if ($inner_Key != "TYPE_OF_HOUSE")
{
$names_ref = \@$inner_Key;
@data_Array = @{$names_ref};
print($data_Array[0]);
print($data_Array[1]);
print($data_Array[2]);
}
else
{
print($inner_Key);
}
}
}
我成功地打印了:“Home 1”、“Home 2”,但是在尝试读取内部内容时,尽管我使用了对数组的引用,但并不顺利。我错过了什么?我的目标是“识别”字段的类型,如果它是 TYPE_OF_HOUSE
,则简单地打印它,因为它不是数组。否则,打印其数组的内部内容。
您必须使用 strict
和 warnings
,因为它们会告诉您很多有关代码错误的信息。
比较字符串时需要使用ne
而不是!=
。
您应该使用不同的数据结构来简化访问内部数据元素的过程。你有一个数组哈希,但它作为哈希哈希更有意义。通过将 =>
用于 'TYPE_OF_HOUSE' => "Villa"
,您已经欺骗自己相信这是一个散列。然而,它只是一个平面阵列。数组的第一个元素是 TYPE_OF_HOUSE
,第二个元素是 Villa
,第三个是 FIELD1
,第四个是数组引用,等等
use warnings;
use strict;
my %Homes = (
"Home 1" => {
'TYPE_OF_HOUSE' => "Villa",
'FIELD1' => [ "1", "2", "3" ],
'Field2' => [ "2", "3", "4" ],
'Field3' => [ "3", "4", "5" ],
},
"Home 2" => {
'TYPE_OF_HOUSE' => "Duplex",
'FIELD1' => [ "1", "2", "3" ],
'Field2' => [ "2", "3", "4" ],
'Field3' => [ "3", "4", "5" ],
},
"Home 3" => {
'TYPE_OF_HOUSE' => "Apartment",
'FIELD1' => [ "1", "2", "3" ],
'Field2' => [ "2", "3", "4" ],
'Field3' => [ "3", "4", "5" ],
},
);
my @data_Array;
my ( $inner_Key, $key, $names_ref );
foreach $key ( keys %Homes ) {
print("Inner values of house $key are:");
print "\n";
foreach $inner_Key ( keys %{ $Homes{$key} } ) {
if ( $inner_Key ne "TYPE_OF_HOUSE" ) {
@data_Array = @{ $Homes{$key}{$inner_Key} };
print( $data_Array[0] );
print "\n";
print( $data_Array[1] );
print "\n";
print( $data_Array[2] );
print "\n";
}
else {
print($inner_Key);
print "\n";
}
}
}
我用 perltidy
来改进缩进。我添加了换行符以使您的 print
输出更易于阅读。