在这个脚本中
#!/usr/bin/perl -w
use strict;
my @ar = (1,2,10,3,5);
@ar = sort {$a <=> $b} @ar;
Run Code Online (Sandbox Code Playgroud)
它@ar现在包含(1,2,3,5,10).
现在我想获得逆数组即(4,6,7,8,9).
有什么建议可以做到吗?
使用set操作时,哈希工作正常:
my %have = map {$_ => 1} @ar;
my @inv = grep {not $have{$_}} 1 .. 10;
print "@inv\n"; # 4 6 7 8 9
Run Code Online (Sandbox Code Playgroud)
如果您事先不知道边界,并希望从最小值/最大值确定它们@ar,因为它的排序变得容易:
my @inv = grep {not $have{$_}} $ar[0] .. $ar[-1];
Run Code Online (Sandbox Code Playgroud)
这是智能匹配的一个很好的应用:
@inverse = grep { ! ($_ ~~ @ar) } 1..10;
Run Code Online (Sandbox Code Playgroud)
选择1到10之间的所有不在的值@ar.
| 归档时间: |
|
| 查看次数: |
870 次 |
| 最近记录: |