声明数组并推入相同的循环语句

时间:2015-04-24 18:55:31

标签: perl

声明数组并推送相同的语句

这显然不起作用:

push( my(@arr), '') for 0..$somenum;      # []

但是,如果我们使用包变量,它会给我们带来所需的效果:

push( our(@arr), '') for 0..$somenum;     # ['','','', ...]

但它带来了不必要的副作用。

是否有合理,简洁的一体化解决方案?或者使用两个陈述最好的建议?

my @arr;
push( @arr, '' ) for 0..$somenum;         # ['','','', ...]

我想避免多个陈述。当有许多阵列被填充时,它看起来很混乱,并且浪费了太多空间。

我意识到上面的内容可以在没有 push 的情况下完成(即my @arr = ('') x $somenum;),但出于不同的原因,我想使用push。 @texasbruce提出了一个很好的观点,map对于这样的事情会更好,即使有关于为此目的使用 map 的争论。不过,我认为这是一个有趣的练习。

3 个答案:

答案 0 :(得分:2)

>>> df1.mul(df2.squeeze(), axis='index') a b d A 10 20 30 B 60 80 100 C 150 180 210 是官方未定义的行为。

  

注意:使用语句修饰符条件或循环结构(例如,my ... for ...)修改的mystateour的行为为未定义即可。 my $x if ...变量的值可以是my,任何先前分配的值,或者可能是其他任何值。不要依赖它。 perl的未来版本可能会与您尝试使用的perl版本有所不同。这是龙。

(原文强调。)

要为新数组指定值,请使用作业。

undef

如果要分配的值有所不同,请使用my @arr = ('') x ($somenum+1);

map

答案 1 :(得分:2)

据我所知,你应该使用

my @arr = ('') x ($somenum+1);

表示所有元素相同的情况,

my @arr = map rand, 0 .. $somenum;

对于您引用的值不同的情况

答案 2 :(得分:-1)

除了使用push作为赋值运算符之外,我认为这不会起作用。

push my @arr, ('') x ($somenum+1);

对于类似于使用后缀for循环尝试的内容,数组将在循环中以词法范围限定并立即超出范围。