Сравните 2 массива и удалите совпадения - PullRequest
2 голосов
/ 14 марта 2012

У меня есть 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 () просто запрашивает у системы (УАТС) список номеров и помещает их в @system.

Любая помощь приветствуется.

Спасибо

Marty

Ответы [ 2 ]

3 голосов
/ 14 марта 2012

Вам не нужно работать с splice, когда вместо этого используется хеш-слайс:

my @system = query();

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

delete @reserve{@system} ;
my @list_of_reserve = sort { $a <=> $b } keys %reserve ;
1 голос
/ 14 марта 2012

Как насчет:

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