以下数组是数据库查询的结果,我想在Perl中添加一列:
<snip>
foreach my $array_ref ( @stash ) {
print "@$array_ref\n";
}
<snip>
输出结果:
bash-3.2$ ./test.pl
2014 2 1
2015 2 1
2016 2 1
2017 1 0.5
bash-3.2$
我设法在底部添加一行。例如,通过以下代码:
my @stashSum = ['Sum', $sumNumDiv, $sumDiv];
push (@stash, @stashSum);
这导致以下结果:
bash-3.2$ ./test.pl
2014 2 1
2015 2 1
2016 2 1
2017 1 0.5
Sum 7 3.5
bash-3.2$
我正在搜索代码,将以下列添加到原始数组:
my $i=0;
foreach my $array_ref ( @stash ) {
$totalDiv[$i] = $array_ref->[2] * 15;
print "$totalDiv[$i] \n";
}
预期结果如下:
bash-3.2$ ./test.pl
2014 2 1 15
2015 2 1 15
2016 2 1 15
2017 1 0.5 7.5
bash-3.2$
有没有办法以与行类似的方式将列“推”到数组上?如果没有,如何将列添加到Perl中的数组?
答案 0 :(得分:3)
您似乎拥有的是对匿名数组的引用数组,您使用矩阵术语来引用它们,其中列指的是那些匿名数组的元素,行是匿名数组本身。
因此,添加列需要根据在正确位置预先添加,插入或附加其他条目来操纵每个数组。 splice对此类事情很有帮助。
#!/usr/bin/env perl
use strict;
use warnings;
use Test::More;
my $x = [ [1], [2] ]; # Two rows, single column
my @tests = (
[ sub { push_column($x, 3) }, [ [1,3], [2,3] ] ],
[ sub { unshift_column($x, 4) }, [ [4,1,3], [4,2,3] ] ],
[ sub { add_column($x, 5, 1) }, [ [4,5,1,3], [4,5,2,3] ] ],
);
for my $case ( @tests ) {
$case->[0]->();
is_deeply $x, $case->[1];
}
sub add_column {
my ($matrix, $v, $col) = @_;
for my $r ( @$matrix ) {
splice @$r, $col, 0, $v;
}
return;
}
sub push_column {
add_column(@_, scalar @{ $x->[0] });
return;
}
sub unshift_column {
add_column(@_, 0);
return;
}
done_testing;