在For循环中推送函数以创建许多新数组

时间:2014-01-12 14:37:36

标签: perl push

我是Perl的新手,如果有人可以帮助我,我会很感激。

foreach $line(@resultans){
    my @newresultans = split "_",$line;

    ## i will have lots more of $newresultans and @ans
    push(@ans1, $newresultans[2]);
    push(@ans2, $newresultans[3]);
    ......
    ......

 }

我的目的是拆分这样的东西,并将它们分成许多数组。

12,2,依此类推,将以下行推入数组(@ans1)。同样是6,7(@ans2),之后有更多数字,由_分隔。形成@ans3@ans4

2_abc_12_6_.......
2_def_2_7_......
.................

我可以尝试这样的事吗?但它似乎没有用。如果有人可以帮助我,我真的很感激。谢谢!

$ANS_name ="ANS_$colnm";

foreach $line(@resultans){
    my @newresultans = split "_",$line;

    for($colnm=0;$colnm <=$column[0] ; $colnm++){
        push(@$ANS_name, $newresultans[2]);
    }
}

2 个答案:

答案 0 :(得分:3)

在我看来,你所说的是你在每个分割中都有不同数量的列,并且你想要一种动态而不是硬编码的方式来存储它们。我认为你要找的是数组或数组:

my @all;
for my $line (@res) {
    my @new = split /_/, $line;   # split takes a regex, not a string (normally)
    for my $index (0 .. $#new) {
        push @{ $all[$index] }, $new[$index];
    }
}

关于修改变量名称的想法非常糟糕,你应该避免这种情况。如果没有其他任何东西,它正是哈希所做的,但你不必破坏任何规则来使用哈希。我们可以在这里使用哈希,但由于你的数据是连续的,并且你没有固定的名字,所以没有意义。例如:

my %hash;
...
for my $index( 0 .. $#res ) {
    $ANS_name ="ANS_$index";
    push @{ $hash{$ANS_name} }, $new[$index];
}

答案 1 :(得分:1)

你问的是可能的,但不满意。使用数组数组要好得多:

my @column;
for my $line (@resultans) {
  my (undef, undef, @parts) = split /_/, $line;  # discard first 2 elements
  push @{ $column[$_] }, $parts[$_] for 0 .. $#parts;
}

然后@column将是:

(
  [12, 2],
  [6, 7],
)

我们可以访问第一列的条目,例如@{ $column[0] }