【问题标题】:Declaring an array with incremental values in Perl在 Perl 中声明具有增量值的数组
【发布时间】:2012-05-28 11:53:00
【问题描述】:

我知道可以像这样声明一个数组:

my @array = ( 5 .. 10 );

相当于:

my @array = ( 5, 6, 7, 8, 9, 10 );

但是当增量值大于1时是否有类似的速记,例如

my @array = ( 5, 10, 15, 20, 25 );
my @array = ( 100, 200, 300, 400, 500 );

【问题讨论】:

    标签: arrays perl shortcut


    【解决方案1】:
    my @array = map 5*$_, 1..5;
    

    my @array = map 100*$_, 1..5;
    

    【讨论】:

    • "my" variable @array masks earlier declaration in same scope :)
    • @DVK,两个独立的例子,就像在 OP 中一样
    • @ikegami - 我知道,我是在讽刺。我进行了编辑以消除任何可能的怀疑,即它们是单独的示例
    • @DVK 我知道我在这里是少数,但我仍然认为最好使用和阅读{} 版本,map { 100 * $_ } 1..5,因为您不会期望代码块在调用函数之前进行评估,而当只是函数调用的逗号分隔的参数列表中的第一个参数时,您当然可以这样做。是的,我知道它会花费你一个块设置。我不在乎,因为我发现它更具可读性并且不那么混乱,这总是比过早的微优化更重要。我也抱有一些希望,有一天这会在编译器中得到优化。
    【解决方案2】:

    更笼统地说:

    my $start = 5;
    my $stop = 25;
    my $increment = 5;
    my @array = map $start+$increment*$_, 0..($stop-$start)/$increment;
    

    或:

    chomp(my @array = `seq $start $increment $stop`);
    

    (开个玩笑。)

    【讨论】:

      【解决方案3】:

      您也可以使用 Damian Conway 的 List::Maker

      use List::Maker;
      my @list = <0..100 x 5>;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-14
        • 2014-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多