【问题标题】:Perl grep over array indexesPerl grep 数组索引
【发布时间】:2019-02-20 03:35:02
【问题描述】:

我一直在尝试编写以下代码,它最终返回列表中具有奇数和的数字的数组索引。

my @input_numbers = (1,2,4,8,16,32,64);
my @indices_of_odd_digit_sums = grep {
my $number = $input_numbers[$_];
my $sum;
$sum += $_ for split //, $number;
$sum % 2;
} 0..$#input_numbers;

print "@indices_of_odd_digit_sums";

我认为脚本正在使用 $input_numbers[$_],因为 grep 将数组索引 (0..6) 放入 $_

这样 $number 被分配了列表项的实际值。

我有点不确定$_ 是什么:

$sum += $_ for split //, $number;

$_ 现在是实际数字中的每个数字吗?所以对于 16,它是先 1,然后是 6。我不熟悉 'for split' 语法。

感谢您提供的任何帮助

约翰

【问题讨论】:

标签: perl grep


【解决方案1】:

$_default variable。它是一个全局变量,在各种操作(如 for/foreach 循环)中默认设置,并且默认由各种函数使用。这使您可以编写print foreach @array; 之类的内容。

forstatement modifier,这只是将前面的语句包装在 foreach loop 中的另一种方式。

split 是一个函数,它使用给定的模式拆分其参数,并返回一个字符串列表,然后 foreach 循环对其进行迭代,并将每个元素本地别名为 $_

因此该语句可以扩展为:

foreach my $digit (split //, $number) {
  $sum += $digit;
}

也可以使用sum from List::Util进行简化:

use List::Util 'sum';
my $sum = sum split //, $number;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-07
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多