显示来自Perl阵列数组的异构数据

时间:2015-07-02 09:52:11

标签: arrays perl data-structures

伪代码

i=0;
array $id;
array $name; 
array $size;
$array[$i] = ($id, $name, $size); 

我想获得输出

-----------------------------
ID | Name | Size
-----------------------------
$id(0) | $name(0) | $size(0)
$id(1) | $name(1) | $size(1)
$id(2) | $name(2) | $size(2)
...    | ...      | ...
-----------------------------

用于打印数据结构的伪代码

for $row in $array:
    for $col in $row: 
        print $col, "|"; 
    end; 
    print "\n;
end    

我不确定从for-loop内部引用变量到外部for循环。 存在有限数量的变量但我可能需要在R中稍后基于它们进行统计分析。 例如,postreSQL和R之间的数据库连接仍处于测试阶段here。 所以我想保持数据原始。

如何更好地选择此类数据及其所需流程的数据结构?

1 个答案:

答案 0 :(得分:1)

perl中有两个类似的数据结构。

你有list这是一个有序的标量序列。你有hash这是一组无序的键值对。

所以考虑到这一点 - 如果你的'id'是一个关键字段,可能值得使用键值对。 (然后你可以轻松地对它进行排序 - 实际上,你必须生成有序的输出)

但是在你的例子中 - 你真的不需要从'inner'访问'outer'循环:

my @LOL = ( 
                [ 'id', 'name', 'size' ],
                [ 'id2', 'name2', 'size2' ], 
          );

foreach my $row ( @LOL ) {
   print join ( "|", @$row ), "\n"; 
}

这是一个如何工作的简单例子。

但是你的数据可能是关键值 - 所以你可能会这样做:

my %hash = (
    'id1' => {
        'name' => 'myname',
        'size' => 'mysize',
    },
    'id2' => {
        'name' => 'my2name',
        'size' => 'my2size',
    },
);

my @columns = qw ( name size );

foreach my $id ( sort keys %hash ) {
    print join( "|", $id, @{ $hash{$id} }{@columns} ), "\n";
}

除非你需要维持关系,否则这可能没有必要。