gpt4 book ai didi

perl - 将数组推送到哈希时,推送操作不起作用

转载 作者:行者123 更新时间:2023-12-04 15:56:57 25 4
gpt4 key购买 nike

我有两个数组 @arr1@arr2,我的 Perl 代码中有一个散列 %hash

我在 @arr1 中有某些元素,在 @arr2 中有类似的某些元素。我想将 @arr1 的元素作为散列 %hash 的键和数组 @arr2 的元素作为散列 %hash.

我在我的 Perl 脚本中使用以下代码:

use strict;
use warnings;
use Data::Dumper;

my %hash = ();
my @abc = ('1234', '2345', '3456', '4567');
my @xyz = ('1234.txt', '2345.txt', '3456.txt', '4567.txt');

push(@{$hash{@abc}}, @xyz);
print Dumper(%hash);

执行后,我得到以下输出:

./test.pl

$VAR1 = '4';
$VAR2 = [
'1234.txt',
'2345.txt',
'3456.txt',
'4567.txt'
];

打印的不是键值而是它们的总数。我需要输出是在我执行脚本后打印每个键及其值。

有人可以帮忙吗?谢谢。

最佳答案

您正在寻找一个 slice 来一次分配哈希的多个元素:

use strict;
use warnings;
use Data::Dumper;

my %hash = ();
my @abc = ('1234', '2345', '3456', '4567');
my @xyz = ('1234.txt', '2345.txt', '3456.txt', '4567.txt');

@hash{@abc} = @xyz;
print Dumper(\%hash);

产生(虽然键的顺序可能会有所不同):

$VAR1 = {
'4567' => '4567.txt',
'2345' => '2345.txt',
'3456' => '3456.txt',
'1234' => '1234.txt'
};

解释

push(@{$hash{@abc}}, @xyz); 所做的是将元素推送到存储在单个哈希条目中的数组引用中 - @abc 在这里用在标量上下文中,它计算数组的长度,因此是 4。使用切片代替将值列表分配给相应的键列表。

然后 print Dumper(%hash); 首先将 %hash 变成一个交替键和值的列表,因此它们是两个不同的 Data::Dumper 条目。相反,传递对哈希的引用使其将实际数据结构打印为一件事。

关于perl - 将数组推送到哈希时,推送操作不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68527040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com