Arrays 如何从数组的perl散列中获取前n个值
专家们, 我有一个perl中的数组散列,我想打印前2个值Arrays 如何从数组的perl散列中获取前n个值,arrays,perl,hash,Arrays,Perl,Hash,专家们, 我有一个perl中的数组散列,我想打印前2个值 my %dramatis_personae = ( humans => [ 'hamnet', 'shakespeare', 'robyn', ], faeries => [ 'oberon', 'titania', 'puck', ], other => [ 'morpheus, lord of dreams' ], ); foreach my $group (keys %dramatis_p
my %dramatis_personae = (
humans => [ 'hamnet', 'shakespeare', 'robyn', ],
faeries => [ 'oberon', 'titania', 'puck', ],
other => [ 'morpheus, lord of dreams' ],
);
foreach my $group (keys %dramatis_personae) {
foreach (@{$dramatis_personae{$group}}[0..1]) { print "\t$_\n";}
}
我得到的输出是
“哈姆内特
莎士比亚
奥伯伦
二氧化钛
莫菲斯
梦幻之王“
这基本上是每个键的前两个数组值。但我希望输出为:
哈姆内特
莎士比亚
请告诉我如何才能得到这个结果。谢谢 散列是无序的,所以您要求实现的是不可能的。除非您对钥匙和钥匙的顺序有一定的了解,否则您所能得到的最接近的钥匙可能会产生以下任何一种:
'hamnet'、“莎士比亚”
'oberon'、'titania'
“梦幻之王莫斐斯”、“哈姆内特”
“梦幻之王莫斐斯”、“奥伯伦”
my $to_fetch = 2;
my @fetched = ( map @$_, values %dramatis_personae )[0..$to_fetch-1];
以下是更大结构的更有效版本。它还可以更好地处理不足的数据:
my $to_fetch = 2;
my @fetched;
for my $group (values(%dramatis_personae)) {
if (@$group > $to_fetch) {
push @fetched, @$group[0..$to_fetch-1];
$to_fetch = 0;
last;
} else {
push @fetched, @$group;
$to_fetch -= @$group;
}
}
die("Insufficient data\n") if $to_fetch;
散列是无序的,所以您要求实现的是不可能的。除非您对钥匙和钥匙的顺序有一定的了解,否则您所能得到的最接近的钥匙可能会产生以下任何一种:
'hamnet'、“莎士比亚”
'oberon'、'titania'
“梦幻之王莫斐斯”、“哈姆内特”
“梦幻之王莫斐斯”、“奥伯伦”
my $to_fetch = 2;
my @fetched = ( map @$_, values %dramatis_personae )[0..$to_fetch-1];
以下是更大结构的更有效版本。它还可以更好地处理不足的数据:
my $to_fetch = 2;
my @fetched;
for my $group (values(%dramatis_personae)) {
if (@$group > $to_fetch) {
push @fetched, @$group[0..$to_fetch-1];
$to_fetch = 0;
last;
} else {
push @fetched, @$group;
$to_fetch -= @$group;
}
}
die("Insufficient data\n") if $to_fetch;
散列的键没有顺序,所以您应该自己指定键的顺序。然后,您可以从指定的每个键连接数组,并从结果数组中获取前两个值,这是您想要的吗
print "\t$_\n" foreach (map {(@{$dramatis_personae{$_}})} qw/humans faeries other/)[0..1];
散列的键没有顺序,所以您应该自己指定键的顺序。然后,您可以从指定的每个键连接数组,并从结果数组中获取前两个值,这是您想要的吗
print "\t$_\n" foreach (map {(@{$dramatis_personae{$_}})} qw/humans faeries other/)[0..1];
散列没有一组有序的值,您需要用另一种方式来构造它。您可以使用获取所有值,然后从中分割前两个元素,但结果未定义。哈希没有有序的值集,您需要以另一种方式对其进行结构。您可以使用获取所有值,然后从中分割前两个元素,但结果未定义。