【发布时间】:2014-11-04 06:05:21
【问题描述】:
我正在编写一个脚本,该脚本涉及打印数组散列的散列内容。
ex(伪代码):
my %hash = ();
$hash{key1}{key2} = ['value1', 'value2', 'value3', . . .];
或
$hash{key1}{key2} = @array_of_values;
基本上,我希望能够对任意数量的键组合执行此操作,并且能够遍历所有可能的键/值对(或者更正确地表述为键、键/数组对,因为每个值实际上都是一个值数组,每个数组有 2 个与之关联的键)并以以下格式打印输出:
"key1, key2, value1, value2, value3, ...\n"
例如:
#!/usr/bin/perl
use strict;
use warnings;
# initialize hash
my %hash = ();
my $string1 = "string1";
my $string2 = "string2";
# push strings onto arrays stored in hash
push @{$hash{a}{b}}, $string1;
push @{$hash{a}{b}}, $string2;
push @{$hash{c}{d}}, $string2;
push @{$hash{c}{d}}, $string1;
# print elements of hash
# (want to do this as a loop for all possible key/value pairs)
local $, = ',';
print "a, b, ";
print @{$hash{a}{b}};
print "\n";
print "c, d, ";
print @{$hash{c}{d}};
print "\n";
system ('pause');
这段代码的输出如下所示:
a, b, string1,string2
c, d, string2,string1
Press any key to continue . . .
我正在考虑使用 each 运算符,但它似乎只适用于一维散列。 (each只返回一个键值对,涉及2个键时不能正常工作)
如何简化此代码以循环遍历哈希并打印所需的输出,而不管我的哈希有多大?
【问题讨论】:
-
也许应该补充一点,如果您不知道,有些模块会为您打印数据结构,例如
Data::Dumper(核心模块)或Data::Dump。例如。use Data::Dumper; print Dumper \%hash;
标签: perl data-structures hash