嗨我有两个包含4列的数组,我想从array1的column1中的value和array1的column2的array2的column2的值中减去array2的column1中的值,所以on..example:
my @array1=(4.3,0.2,7,2.2,0.2,2.4)
my @array2=(2.2,0.6,5,2.1,1.3,3.2)
Run Code Online (Sandbox Code Playgroud)
所以要求的输出是
2.1 -0.4 2 # [4.3-2.2] [0.2-0.6] [7-5]
0.1 -1.1 -0.8 # [2.2-2.1] [0.2-1.3] [2.4-3.2]
Run Code Online (Sandbox Code Playgroud)
为此,我使用的代码是
my @diff = map {$array1[$_] - $array2[$_]} (0..2);
print OUT join(' ', @diff), "\n";
Run Code Online (Sandbox Code Playgroud)
我现在得到的输出是
2.1 -0.4 2
2.2 -1.1 3.8
Run Code Online (Sandbox Code Playgroud)
第一行再次使用第一行而不是第二行,我该如何克服这个问题呢?
我需要输出3列的行,就像我上面显示的那样,所以我只用3个值的行填充了我的数组.
这将产生请求的输出.但是,我怀疑(根据您的评论),如果您只是显示您的原始输入,我们可以产生更好的解决方案.
use strict;
use warnings;
my @a1 = (4.3,0.2,7,2.2,0.2,2.4);
my @a2 = (2.2,0.6,5,2.1,1.3,3.2);
my @out = map { $a1[$_] - $a2[$_] } 0 .. $#a1;
print "@out[0..2]\n";
print "@out[3..$#a1]\n";
Run Code Online (Sandbox Code Playgroud)
首先,您的代码甚至无法编译。Perl 数组不是用空格分隔的 - 您需要qw()将它们转换为数组。不确定你是如何得到结果的。
Perl 没有二维数组。2.2 不是 的第 1 行的第 1 列@array1- 它是 的索引为 3 的元素@array1。就 Perl 而言,换行符只是另一个空格分隔符,而不是像您想象的那样神奇地将一维数组变成表。
要获得您想要的结果(将这 6 个元素作为 2 个 3 元素数组处理),您可以将它们存储在 arrayrefs 数组中(Perl 的 C 多维数组实现):
my @array1=( [ 4.3, 0.2, 7 ],
[ 2.2, 0.2, 2.4] );
for(my $idx=0; $idx1 < 2; $idx1++) {
for(my $idx2=0; $idx2 < 3; $idx2++) {
print $array1[$idx1]->[$idx2] - $array2[$idx1]->[$idx2];
print " ";
}
print "\n";
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以通过使用偏移量来简单地伪造它,就像指针算术在 C 多维数组中的工作方式一样:
my @array1=( 4.3, 0.2, 7, # index 0..2
2.2, 0.2, 2.4); # index 3..5
for(my $idx=0; $idx1 < 2; $idx1++) {
for(my $idx2=0; $idx2 < 3; $idx2++) {
print $array1[$idx1 * 3 + $idx2] - $array2[$idx1 * 3 + $idx2];
print " ";
}
print "\n";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2875 次 |
| 最近记录: |