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;
}
} 展开
想表达当$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;
}
} 展开
1个回答
展开全部
你可以说说以下两件事吗 ?
@$beads 和 @$balls 的结构是怎样的?
$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;;
你追问的问题其实也不简单, 这里我没有足够的字数能回答, 你另开一题问吧
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询