在Perl的列表中查找缺少的数字

时间:2016-09-02 07:17:48

标签: linux perl

例如,给定(1,2,5,6,7),我想确定3和4缺失?

我发现以下代码实现了我的目标。

#!/usr/bin/perl
use Data::Dumper;
@list= (1,2,5,6,7);
@missing = map $list[$_-1]+1..$list[$_]-1, 1..@list-1;
print Dumper(\@missing);

输出:

$VAR1 = [
          3,
          4
        ];

有人可以解释上面代码背后的逻辑吗?

1 个答案:

答案 0 :(得分:4)

  

地图 EXPR 列表

     

评估LIST的每个元素的BLOCK或EXPR   (在每个元素的本地设置$ _)并返回列表值   由每次评估的结果组成。

在你的情况下:

map $list[$_-1]+1..$list[$_]-1, 1..@list-1;

列表:1..@list-1是一个包含1到4(数组长度为1)的元素的列表

EXPR:$list[$_-1]+1..$list[$_]-1使用上面的索引(1到4)并使用范围运算符计算表达式。

在下面的每次迭代中都会发生:

$list[1-1]+1..$list[1]-1: 1+1..2-1 = ''
$list[2-1]+1..$list[2]-1: 2+1..5-1 = 34
$list[3-1]+1..$list[3]-1: 5+1..6-1 = ''
$list[4-1]+1..$list[4]-1: 6+1..7-1 = ''