perl中一个foreach语句的编写

背景:有两个数组@$beadsand@$balls想表达当$beadname与$ballname相同时,$bead的XYZ坐标等于$ball的XYZ坐标。不知道应该怎么修... 背景:有两个数组@$beads and @$balls
想表达当$beadname与$ballname相同时,$bead的XYZ坐标等于$ball的XYZ坐标。

不知道应该怎么修改?没系统学过perl,自己瞎写的,谢谢!

foreach my $bead (@$beads);my $ball (@$balls)
{
$x =$bead->XYZ->X;
$y =$bead->XYZ->Y;
$z =$bead->XYZ->Z;

$X =$bead->XYZ->X;
$Y =$bead->XYZ->Y;
$Z =$bead->XYZ->Z;
if ($beadname eq $ballname){
$X = $x;
$Y = $y;
$Z = $z;
}
}
展开
 我来答
百度网友c9e795dda
推荐于2016-12-03 · TA获得超过5167个赞
知道大有可为答主
回答量:1128
采纳率:0%
帮助的人:1138万
展开全部

你可以说说以下两件事吗 ? 

  1. @$beads 和 @$balls 的结构是怎样的?

  2. $beadname 和 $ballname 是怎样来的? 比说是一个 sub 的参数, 或是数组中的某个元素?


光从文字的意思来看, 你想做到的基本上就像以下了

my $bead = [0,0,0];
my $ball = [5,5,5];

my ( $beadname, $ballname ) = ( "ABC", "ABC" ) ;
@$bead = @$ball if ( $beadname eq $ballname ) ;
print "@$bead";
追问
$beads是由很多$bead所组成的,每个bead包含有name,XYZ坐标等一系列的属性。$beadname就是自己定义的一个变量,表示bead的name。$ball也是一个道理。
另外,想追问一个问题,假设@beads里有5个元素,想随机抽取3个组成一个新的数组,应该怎么弄呢?谢谢!
追答
use strict;
my $beads = [["ABC",0,0,0], ["DEF", 1,1,1], ["GHI",2,2,2]];
my $balls = [["MNO",10,10,10], ["DEF", 11,11,11], ["XYZ",12,12,12]];
 
my ( $beadname, $ballname ) = ( "DEF", "DEF" ) ;

if ( $beadname eq $ballname ) {
    my @ballXYZ;
    # 找出 balls 能对应的数组
    foreach my $index ( 0.. $#$balls ) {
       my $thisBallName = $balls->[$index][0];
       if ( $thisBallName eq $ballname ) {
           @ballXYZ = @{$balls->[$index]}[1..3];
           last;
       }
    }
    # 找出 beads 能对应的数组, 并替换座标
    foreach my $index ( 0..$#$beads ) {
        my $thisBeadName = $beads->[$index][0];
        if ( $thisBeadName eq $beadname ) {
            @{$beads->[$index]} = ( $beadname, @ballXYZ );
            last;
        }
    }
}
# 验证
use Data::Dumper;
print Dumper $beads;;


你追问的问题其实也不简单, 这里我没有足够的字数能回答, 你另开一题问吧

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式