首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在perl中减去两个不同数组中的值?

如何在perl中减去两个不同数组中的值?
EN

Stack Overflow用户
提问于 2011-08-16 22:21:12
回答 2查看 3.1K关注 0票数 5

您好,我有两个包含4列的数组,我想用array2的column1中的值减去array1的column1中的值,并从array1的column2中减去array2的值,所以on..example:

代码语言:javascript
运行
复制
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)

所以所需的输出是

代码语言:javascript
运行
复制
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]

为此,我使用的代码是

代码语言:javascript
运行
复制
my @diff = map {$array1[$_] - $array2[$_]} (0..2);          
print OUT join(' ', @diff), "\n";

我现在得到的输出是

代码语言:javascript
运行
复制
2.1 -0.4 2
2.2 -1.1 3.8

同样,第一行是从数组一中使用的,而不是第二行,我如何克服这个问题?

我需要3列的行输出,就像我上面展示的那样,所以我刚刚在3列的行中填充了我的数组。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-16 22:29:42

首先,你的代码甚至不能编译。Perl数组不是空格分隔的--您需要一个qw()来将它们转换为数组。不知道你是怎么得到结果的。

Perl没有二维数组。2.2不是@array1的第1行的column1 -它是索引为3的@array1的元素。对于Perl而言,换行符只是另一个空格分隔符,而不是像您想象的那样能将一维数组神奇地转换为表的东西。

要获得您想要的结果(将这6个元素作为2个3元素数组处理),您可以将它们存储在一个arrayrefs数组中(Perl对C多维数组的实现):

代码语言:javascript
运行
复制
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";
}

或者,你可以简单地使用偏移量来伪造它,就像指针算法在C的多维数组中的工作方式一样:

代码语言:javascript
运行
复制
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";
}
票数 4
EN

Stack Overflow用户

发布于 2011-08-16 23:19:51

这将产生请求的输出。然而,我怀疑(基于你的评论),如果你简单地展示你的原始输入,我们可以产生一个更好的解决方案。

代码语言:javascript
运行
复制
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";
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7079685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档