如何将数组解析为数组的哈希?

我是一个初学者(湿实验室生物学家,我一生中第一次不得不摆弄生物信息学知识),而今天我陷入了一个问题:如何将数组解析为perl中的数组?

这不起作用:

DateTime   Market Position  
2018-04-02 AD     -1  
2018-04-02 CD      1  
2018-04-03 AD     -1  
2018-04-03 CD      0  
2018-04-04 AD     -1  
2018-04-04 CD      0  
2018-04-05 AD      1  
2018-04-05 CD      0  
2018-04-06 AD      1  
2018-04-06 CD      1  
2018-04-07 AD      1  
2018-04-07 CD      1   

我终于通过for循环规避了我的问题:

@myhash{$key} = @mytable;

它当然可以工作,并且可以完成我需要做的事情,但是在我看来,这并不是解决问题的方法,而只是解决问题的一种方法...当某事不起作用时,我想理解为什么...

非常感谢您的建议!

super_grubby 回答:如何将数组解析为数组的哈希?

如果您询问如何将数组作为哈希值之一,则可以通过引用该数组来实现,因为引用是标量,而哈希值必须是标量。这是通过反斜杠运算符完成的。

$myhash{$key} = \@mytable;

您描述的for循环通过自动生存来创建这样的引用,因为$myhash{$key}[0]$myhash{$key}处创建了一个数组引用,以便为其分配索引。还请注意,获取引用和复制每个值之间的区别在于,在前一种情况下,事实发生后对数组的更改也会影响通过哈希值引用的值,反之亦然。

$mytable[5] = 42; # $myhash{$key}[5] is also changed
,

正如Grinnz提到的,您可以保存对数组的引用,但是对数组的任何更改都将反映在哈希中(它是相同的数据)。

例如,如果您在循环中重复使用相同的数组,则哈希中的数据将反映循环的最后一次迭代。

在这种情况下,您将需要在哈希中存储数组的副本。

2019-11-21 this is today
2019-11-22 this is tomorrow
2019-11-23 this is day after tomorrow
2020-01-01 this is january 1 next year

Programming Perl: Data strutures

本文链接:https://www.f2er.com/3055238.html

大家都在问