比较2个数组并删除匹配项

时间:2012-03-14 14:24:24

标签: perl array-splice

我有2个数组(@system@reserve)。每个都包含一个数字列表,我想比较和拼接(可能是?)@reserve中与@system中的数字匹配的数字。

我已经尝试了一些回复来查找和拼接问题,但它们似乎没有起作用。使用Perl 5.12.4。

@reserve中的数字始终为11000..136000,系统中的数字始终在@system范围内,但会有所不同。我一直关注的代码如下:

my @system = query();
my @reserve = 11000..136000;

foreach my $num (@system) {
my $index = 0;
$index++ until $reserve[$index] eq $num;
splice (@reserve,$index,1);
}

query()只是要求系统(PBX)提供一个数字列表并将它们推送到@system

感谢任何帮助。

谢谢,

玛蒂

2 个答案:

答案 0 :(得分:3)

当您使用hashslice时,您不必使用splice

my @system = query();

my %reserve ;
@reserve{(11000..136000)} = undef ;

delete @reserve{@system} ;
my @list_of_reserve = sort { $a <=> $b } keys %reserve ;

答案 1 :(得分:1)

怎么样:

my @system = query();
my @reserve = 11000..136000;
my %tmp = map{$_ => 1}@system;
@reserve = grep{!exists $tmp{$_}}@reserve;