Perl中的数组数组

War*_*250 4 perl multidimensional-array

我是Perl的新手,但是我需要它来从一些可怕的HTML文件中获取一些文本.到目前为止,在代码中,我已经提到了我需要的所有值(我验证它适用于数据转储器):

对于每个数据记录,即2D表的行,它们被称为:

$org, $gene_name, $number, $motif_num, $pos, $strand, $seq
Run Code Online (Sandbox Code Playgroud)

我有很多数据条目,每一个都是一行,上面的值作为列.

为了稍后用它们做其他的事情,我想制作一个2D数组结构,这样我就可以遍历每个条目(行)并选出我需要的值等等.

我认为这样做的最佳方法是使用循环和每个数据条目,在使用regexp匹配提取值后,将值/列组合成单个数据记录的数组:

my @seidl_array_row = ($org, $gene_name, $number, $motif_num, $pos, $strand, $seq);
Run Code Online (Sandbox Code Playgroud)

然后将此数组推送到完成的2D数组阵列:

push @seidl_array, [ @seidl_array_row ];
Run Code Online (Sandbox Code Playgroud)

(@seidl_array是my在循环之前定义的.)

所以实际上我得到了一个2D数据表,其中数组@seidl_array的每个元素都是一个包含值$ org,$ gene_name,$ number,$ motif_num,$ pos,$ strand和$ seq的数组.

我是Perl的新手,因此我不知道这是否是以编程方式执行此操作的正确方法,因为我在以后使用此数据时遇到问题.我想知道问题是否与我如何构建数组数组一起.我的书中的示例使用简单的数据集进行静态处理,这是一个更大的基因组数据gtf文件,因此静态执行它并不可行.

tau*_*uli 7

据我所知,你的方法没有错.使用对数组的引用,而不是复制数组,choroba建议,有数据不被不必要地复制的好处(但要记住:只有当你声明@seidl_array_row作品里面循环,否则你只想让几个引用到同一个数组).

通过完全跳过行数组可以获得相同的优势:

push @seidl_array, [ $org, $gene_name, $number, $motif_num, $pos, $strand, $seq ];
Run Code Online (Sandbox Code Playgroud)

为了方便访问数据,我经常使用哈希数组,如下所示:

push @seidl_array, {
    org    => $org,
    name   => $gene_name,
    number => $number,
    motif  => $motif_num,
    pos    => $pos,
    strand => $strand,
    seq    => $seq,
};
Run Code Online (Sandbox Code Playgroud)

这样做的好处是您不必记住数组中相应值的位置,但可以按名称访问它们.