【问题标题】:Working with multi dimensional hashes in Perl?在 Perl 中使用多维哈希?
【发布时间】:2014-05-27 17:42:39
【问题描述】:

关于在 Perl 中推送到多维散列的快速问题。我有以下变量:

%pids #name of hash 
$pid = 24633 #key of the has 
$time 00:0 #time reference 
$line #has a line full of data

我正在从 $line 输入 $pid 和 $time。如果键 24633 与参考元素 05:3 一起存在,则将行添加到 05:3 并使用 05:3 作为键。

pids{24633}{05:3}

我试过了:

if ($pids{$pid}{$time}){
     @{$pids{$pid}{$time}} -> $line;
}

我也试过这个:

if ($pids{$pid}{$time}){
    push @{$pids{$pid}{$time}}, $line;

但是当它尝试推送时,它一直给我一个“不是 HASH 参考”。有什么建议?谢谢!

这就是我构建哈希的方式:

foreach my $key (keys %pids){
    if ($key =~ $mPID){
    push @messages, $line;
    }
}  

这是哈希结构:

$VAR1 = {   
      '17934' => [
                   '14:3'
                 ],
      '17955' => [
                   '13:3'
                 ],
      '24633' => [
                   '05:3'
                 ],
      '6771' => [
                  '04:1'
                ],
      '7601' => [
                  '06:0'
                ],
};

【问题讨论】:

  • 您有一个数组哈希,但您尝试将它用作哈希的哈希。您的代码也与问题无关,因为它没有显示您如何构建哈希。
  • 我已经包含了我是如何构建它的,谢谢
  • 不,你没有。您已经介绍了如何使用散列来尝试构建一个数组,这将使用当前代码用未定义的值填充数组。 (因为你使用$key,但存储$line。)

标签: arrays perl hash


【解决方案1】:

当您尝试将 %pids 结构作为散列的散列访问时,它被初始化为数组的散列

use strict;
use warnings;

my %pids = (   
    '17934' => [ '14:3' ],
    '17955' => [ '13:3' ],
    '24633' => [ '05:3' ],
    '6771'  => [ '04:1' ],
    '7601'  => [ '06:0' ],
);

print $pids{7601}[0], "\n";  #  Prints 06:0

print $pids{7601}{"06:0"}; # Error

如果您真的希望 %pids 是数组的哈希值,则必须首先弄清楚为什么它是数组的哈希值。

【讨论】:

  • 我为什么要使用一个而不是另一个?原谅我,还在学习。并感谢您的链接,很多很棒的信息
  • 为什么要对数组使用散列?如果你想要一个有序的值列表,你会使用一个数组。如果你想要键值对关系,你会使用散列。只有您知道您的数据,因此需要哪一个。
  • 谢谢。我的意思是数组散列或散列散列
猜你喜欢
  • 2012-09-06
  • 1970-01-01
  • 2011-12-10
  • 2015-01-17
  • 2011-05-07
  • 2012-10-26
  • 2018-02-25
  • 2011-04-11
  • 2013-12-04
相关资源
最近更新 更多