Как я могу сравнить массивы в Perl? - PullRequest
7 голосов
/ 07 апреля 2010

У меня есть два массива, @a и @b. Я хочу сделать сравнение среди элементов двух массивов.

my @a = qw"abc def efg ghy klm ghn";
my @b = qw"def ghy jgk lom com klm";

Если какой-либо элемент соответствует, тогда установите флаг. Есть ли простой способ сделать это?

Ответы [ 11 ]

0 голосов
/ 07 апреля 2010

Грубая сила должна сделать трюк для малого n:

my $flag = 0;
foreach my $i (@a) {
    foreach my $k (@b) {
        if ($i eq $k) {
            $flag = 1;
            last;
        }
    }
}

Для большого n используйте хеш-таблицу:

my $flag   = 0;
my %aa     = ();
   $aa{$_} = 1 foreach (@a);
foreach my $i (@b) {
    if ($aa{$i}) {
        $flag = 1;
        last;
    }
}

Где большой n это |@a| + |@b| > ~1000 предметов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...