我是Perl中的新手并尝试了一些东西。我注意到的一件事是,如果想要将数组作为hashmap键的值传递,一种方法是通过引用传递它。如下
years = ['2014', '2015', '2016']
for year in years :
df1 = pd.read_excel(year +'.xlsx')
有没有办法直接按值传递数组? 感谢
答案 0 :(得分:4)
哈希将字符串(键)映射到标量值。哈希中的值只能是标量。
数组不是(按照定义!)标量。获取表示该数组的标量值的最佳方法是获取对该数组的引用。这就是你的代码所做的。这就是你应该怎么做的。
还有其他方法可以创建标量值来表示数组。例如,您可以使用join()
从数组元素创建一个字符串。但这将非常脆弱,因为您需要找到一个不出现在任何元素中的分隔符。
就像你正在做的那样,更好地选择参考。
更新:为了澄清,有三种方法可以通过参考进行此操作。
$hash{key} = \@array
- 获取对数组的引用并将引用存储在$hash{key}
中。$hash{key} = [ @array ]
- 将数组展开到列表中,使用该列表作为元素创建一个新数组,并返回对此新数组的引用(有效复制数组)。@{$hash{key}} = @array
- 这也会获取数组的副本并存储对副本的引用。答案 1 :(得分:0)
在perl 5.10和5.14下,以下对我来说很好:
use strict;
use Data::Dumper;
my @array= qw(foo 42 bar);
my %hash;
@{ $hash{key} } = @array;
$hash{key} = [ @array ]; #same as above line
print Dumper(\%hash,$hash{key}[1]);
输出(您的订单可能会有所不同):
$VAR1 = {
'key' => [
'foo',
'42',
'bar'
]
};
$VAR2 = '42';
我更喜欢@{ $hash{key} }
语法,因为你可以推送/弹出它,即
push @{ $hash{key} }, "value";
这是非常方便的(对我来说无论如何)
此外,使用此语法,您正在复制数组,而不仅仅是对它进行引用,这意味着您可以更改原始数组而不会影响哈希