【问题标题】:Array of arrays in PerlPerl 中的数组数组
【发布时间】:2013-04-15 12:21:57
【问题描述】:

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

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

$org, $gene_name, $number, $motif_num, $pos, $strand, $seq

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

以后要对它们做其他事情,我想创建一个二维数组结构,这样我就可以遍历每个条目(行)并挑选出我需要的值等等。

我认为执行此操作的最佳方法是使用循环,并且对于每个数据条目,在使用正则表达式匹配提取值后,将值/列组合成单个数据记录的数组:

my @seidl_array_row = ($org, $gene_name, $number, $motif_num, $pos, $strand, $seq);

然后将这个数组推入完成的二维数组数组中:

push @seidl_array, [ @seidl_array_row ];

(@seidl_array 在循环之前用my 定义。)

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

我是 Perl 新手,所以我不知道这是否是以编程方式执行此操作的正确方法,因为我在稍后处理这些数据时遇到了问题。我想知道问题是否在于我最初是如何构造数组的。我书中的示例使用简单的数据集进行静态处理,这是一个更大的基因组数据 gtf 文件,因此静态处理实际上并不可行。

【问题讨论】:

  • 您以后遇到了什么问题?作为记录,您的二维数组看起来不错,其次,您可能会发现使用特定于 HTML 的库从 HTML 中提取数据更容易,而不仅仅是正则表达式

标签: perl multidimensional-array


【解决方案1】:

据我所知,您的方法没有任何问题。正如 choroba 建议的那样,使用对数组的引用而不是复制数组的好处是不会不必要地复制数据(但请记住:只有在循环中声明 @seidl_array_row inside 时才有效,否则你只会对同一个数组进行多次引用)。

您可以像这样完全跳过行数组来获得同样的优势:

push @seidl_array, [ $org, $gene_name, $number, $motif_num, $pos, $strand, $seq ];

为了更方便地访问数据,我经常使用这样的哈希数组:

push @seidl_array, {
    org    => $org,
    name   => $gene_name,
    number => $number,
    motif  => $motif_num,
    pos    => $pos,
    strand => $strand,
    seq    => $seq,
};

这样做的好处是您不必记住数组中各个值的位置,而是可以通过名称访问它们。

【讨论】:

  • +1 用于使用哈希而不是数组。养成一个好习惯。
  • 谢谢,我已经更改了我的代码,以便它使用哈希。因此,如果我想遍历所有元素并进行操作,那么正确的方法是这样做,例如我想打印所有链变量或以其他方式使用它们while (my %seidl_row = shift @seidl_array){ print Dumper $seidl_row{strand};}?
  • 我想我已经想出了一个像上面这样有效的循环:for my $i (0 .. $#seidl_array){print "Finding locations of motifs per gene ", $seidl_array[$i]{geneID}, "\n";}
【解决方案2】:

您的解决方案对我来说似乎是正确的。使用[ @seidl_array_row ] 创建列表的副本,如果您在循环内正确声明了带有my 的行,则可以直接存储其引用以避免不必要的复制:

push @seidl_array, \@seidl_array_row;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-10
    • 2015-01-29
    • 2011-07-02
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    • 2018-03-24
    • 2021-08-24
    相关资源
    最近更新 更多