Perl哈希结构数组

时间:2014-07-16 20:13:47

标签: perl perl-data-structures

这是一个设计设置问题。我知道在Perl中没有数组数组。我正在寻找能够在飞行中的某些阶段从大型文本文件中提取数据的代码。这些阶段中的每一个都跟踪不同的变量(以及它们的不同数量)。我必须存储它们,因为在脚本的第二部分我将它们重写为另一个文件,我在阅读时更新。

我首先想到的是我应该有一个哈希数组,但每个阶段的变量并不相同。然后我想也许和数组的名称有几个数组(我猜的参考数组)。

数据示例与

类似
phase 100.00  mass 0.9900720175260495E+005 
phase 240.00  gcrad 61442116.0 long 0.963710076E+003 gdalt 0.575477727E+002 vell 0.9862937759999998E+002

数据已经完成,但你应该得到这个想法,并且会有很多阶段,变量可能在每个阶段中包含1到25个变量

2 个答案:

答案 0 :(得分:3)

您可以在Perl中使用Arrays of Arrays。您可以在此处找到有关Perl数据结构的文档,包括Arrays of Arrays:http://perldoc.perl.org/perldsc.html。也就是说,看看你提供的样本,看起来你需要的是一个哈希数组。也许是这样的:

my @data = (
  { phase => 100.00,
    mass  => 0.9900720175260495e005 },
  { phase => 240.00
    gcrad => 61442116.0
    long  => 0.963710076e003
    gdalt => 0.575477727e002
    vell  => 0.9862937759999998e002 }
);

访问您将使用的数据:

$data[0]->{phase} # => 100.00

你也可以像这样使用哈希哈希:

my %data = (
  name1 => { 
    phase => 100.00,
    mass  => 0.9900720175260495e005
  },
  name2 => {
    phase => 240.00
    gcrad => 61442116.0
    long  => 0.963710076e003
    gdalt => 0.575477727e002
    vell  => 0.9862937759999998e002
  }
);

访问您将使用的数据:

$data{name1}->{phase} # => 100.00

Mastering Algorithms in Perl

这本书是学习如何在Perl中实现高级数据结构和算法的重要资源。

答案 1 :(得分:2)

在定义数组,数组引用和散列引用时,我使用以下助记符:

对列表使用括号 - 可以将列表分配给数组或散列:

my %person = (
    given_name  => 'Zaphod',
    surname     => 'Beeblebrox'
);

my @rainbow = (
    'red',
    'orange',
    'yellow',
    'green',
    'blue',
    'indigo',
    'violet'
);

因为列表被分配给列表类型 - 数组和散列,所以没有语义歧义。但是,在处理数组引用或散列引用时,分隔符必须区分引用类型,因为标量变量的$符号不能用于区分两种类型的引用。因此,[]用于表示数组引用,就像[]用于取消引用数组一样,{}用于表示哈希引用,就像使用{}一样dereference哈希。

所以arrayrefs数组如下所示:

my @AoA = ( 
   [1,2,3],
   [4,5,6],
   [7,8,9]
);

hashrefs数组:

my @AoH = (
      { given_name => 'Ford',   surname => 'Prefect' },
      { given_name => 'Arthur', surname => 'Dent' }

);

分配给标量变量的hashref:

my $bones = {
    head        => 'skull',
    jaw         => 'mandible',
    'great toe' => 'distal phalanx'
};