如何反转阵列?

San*_*ing 1 perl

在这个脚本中

#!/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).

有什么建议可以做到吗?

Eri*_*rom 8

使用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)


soc*_*pet 6

这是智能匹配的一个很好的应用:

  @inverse = grep { ! ($_ ~~ @ar) } 1..10;
Run Code Online (Sandbox Code Playgroud)

选择1到10之间的所有不在的值@ar.

  • 只要`@ ar`不是太大就可以了.当匹配数组时,智能匹配必须使用顺序搜索. (2认同)