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文件,因此静态执行它并不可行.
据我所知,你的方法没有错.使用对数组的引用,而不是复制数组,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)
这样做的好处是您不必记住数组中相应值的位置,但可以按名称访问它们.