我有N个数组,我想在单个for循环中打印它们的第一个元素
我的代码:
@arr1=qw(1..5);
@arr2=qw(6..10);
...
@arrN=qw(...);
for($i=1;$i<=$N;$i++)
{
print "$arr[$i][0]";
}
答案 0 :(得分:5)
当您发现需要知道0 ... N个不同变量的名称时。是时候考虑你可能做错了。
Arrays = 0的列表.N值,可以是顺序的
Hash = 0的列表.. N个命名值
对于您的阵列,除非您真的想要转换为字符串,否则请不要使用qw()
只使用裸()
请参阅下面的解决方案,您需要一个数组数组: #!的/ usr / bin中/ perl的
use strict;
use warnings;
my $n = 10;
my @nArrays;
#fills the nArrays list with array_refs
for my $num(0 .. $n){
push @nArrays, [($num .. $num+5)];
}
#Print out the arrays, one per row, long way
for my $array (@nArrays){
print $array->[0], "\n";
}
答案 1 :(得分:2)
如果与所有正常建议相反,您将use strict;
从脚本中删除,则可以使用:
$N = 3;
@arr1 = (1..5);
@arr2 = (6..10);
@arr3 = (7..12);
@arrs = ("arr1", "arr2", "arr3");
for ($i = 0; $i < $N; $i++)
{
print "$arrs[$i][0]\n";
}
输出:
1
6
7
绝对不推荐这样做,但它确实有效(主要是出于向后兼容的原因)。
使用use strict;
等,您可以使用显式引用:
use strict;
use warnings;
my $N = 3;
my @arr1 = (1..5);
my @arr2 = (6..10);
my @arr3 = (7..12);
my @arrs = (\@arr1, \@arr2, \@arr3);
for (my $i = 0; $i < $N; $i++)
{
print "$arrs[$i][0]\n";
}
输出:
1
6
7
但总的来说,使用单个数组数组可能会做得更好,也许是这样:
use strict;
use warnings;
my $N = 3;
my @arr = ( [1..5], [6..10], [7..12] );
for (my $i = 0; $i < $N; $i++)
{
print "$arr[$i][0]\n";
}
输出:
1
6
7
答案 2 :(得分:1)
您所考虑的内容称为symbolic reference,通常不是good idea。
如果这些变量的值属于一起,则已经存在一个由整数索引的数据结构:使用数组来保存它们:
use strict;
use warnings;
my @arr = (
[ 1 .. 5 ],
[ 6 .. 10 ],
# ...
[ 1_000_000 .. 1_000_005 ],
);
for my $i (0 .. $#arr) {
print $arr[$i][0], "\n";
}