用于组合数组以形成结构的Perl脚本

时间:2016-12-09 23:35:15

标签: perl struct

我有perl脚本,它从excel文件中读取数据并将它们推送到数组中。我有很多这样的数组,我想将它们组织成一个结构。 我的数组可以看作:

@keys = {1,2,3,4};
@names = {A,B,C,D};
@var = {var1,var2,var3,var4};
@count = {c1,c2,c3,c4};

我想将它们组织成如下结构:

struct 1{
    A;
    var1;
    c1;
}
struct 2{
    B;
    var2;
    c2;
}

同样,我也想组织其他结构。最后,我想创建一个包含所有结构的数组。我想使用该数据的引用名称来引用结构中的数据。

如果我可以获得有关如何在结构中引用数据以及如何在代码中稍后使用它们的帮助,那将会很棒。 我知道我的问题是抽象的,但我无法弄清楚如何在perl中创建/使用结构。

我使用下面的链接来了解结构的一些基本知识。 http://perldoc.perl.org/Class/Struct.html

******** *********编辑

很抱歉,我正确指定了我的代码行。在这里重写它们:

my @keys = ("1","2","3","4"};
my @names = ("A","B","C","D");
my @var = ("var1","var2","var3","var4");
my @count = ("c1","c2","c3","c4");

另外,我想指定如下结构:

struct( 1 => {
    name => "A",  # want to iterate over the @names array to assign the values
    var => "var1",  # similarly will iterate over the @var array for each struct
    count => "c1", #similar for this one as above
});

我想创建一个如上所述的结构。我想知道这是否是创建此类结构的正确方法。后来当我有一个所有这样的结构的数组时,我想使用struct_name和引用名称(如name,var或count)访问该结构的数据。

我希望它清楚。谢谢。

2 个答案:

答案 0 :(得分:1)

你想要达到的目标有点不同。请注意red在Perl中创建哈希引用,以分配给数组,使用圆括号。

您不需要Class :: Struct来构建数据结构。数组和散列是该语言的一部分,请参阅perldata

我不得不猜测输出结构应该是什么,但下面会产生类似的结果:

{1,2,3,4}

输出:

#!/usr/bin/perl
use warnings;
use strict;

my @keys = (1, 2, 3, 4);
my @names = qw( A B C D );
my @var = qw( var1 var2 var3 var4 );
my @count = ('c1', 'c2', 'c3', 'c4');

my %struct;
$struct{ shift @keys } = [ shift @names, shift @var, shift @count ]
    while @keys;

use Data::Dumper; print Dumper \%struct;

答案 1 :(得分:0)

不是像在C中那样使用结构,而是使用哈希。其他语言称它为字典。这是一对无序的列表。

my %thing = (
    key   => 1,
    name  => 'A',
    var   => 'var1',
    count => 'c1'
);

然后,您可以使用$thing{name}

来获取作品

因此,要从列表转换为哈希,您需要使用每个列表中的相同元素来填充哈希字段。

my %thing = (
    key   => $keys[0],
    name  => $names[0],
    var   => $vars[0],
    count => $count[0]
);

您希望能够通过密钥获取内容。为此你需要另一个包含东西的哈希。哈希包含键和值对。关键是$thing{key},值是对%thing的引用。

$things{ $thing{key} } = \%thing;

如果你想要获得第一件事,你可以使用它的密钥并将其作为哈希引用取回。

my $thing = $things{1};
print $thing->{name};

要为所有值执行此操作,请将其放入循环中,计算项目数。从每列值中创建%thing。并将其添加到%things哈希。

# This is declared outside the loop so it can be seen
# both inside and outside the loop.
my %things;

for my $idx (0..$#keys) {
    # This is declared inside the loop because we're only using
    # the variable in the loop, but the data lives on in %things.
    my %thing = (
        key   => $keys[$idx],
        name  => $names[$idx],
        var   => $vars[$idx],
        count => $count[$idx]
    );

    $things{ $thing{name} } = \%things;
}

my $thing_one = $things{1};
print $thing_one->{name};