Получить идентичные элементы и индекс из 2 массивов в Perl - PullRequest
0 голосов
/ 27 мая 2019

Я новичок в Perl и пытаюсь выполнить следующее сравнение.

У меня есть два массива:
@A = («Красный», «Зеленый», «Желтый»);
@B = («Желтый», «Черный», «Желтый», «Красный», «Белый», «Желтый»);

В массиве A каждый элемент встречается только один раз.
В массиве B каждый элемент может встречаться ноль, один или много раз.

Для каждого элемента в A код должен перечислять позицию, в которой он присутствует в B, и выводить его следующим образом:

> Красный в индексе 3.
> Зеленый отсутствует.
> Желтый в индексах 0, 2 и 5.
> Элементы из B были обнаружены 4 раза в A.

Я попробовал следующее, но не могу понять, как составить список индексов элементов после сравнения двух массивов

foreach $x (@A){
    foreach $y (@B){
    if ($y eq $x){
    print "$y\n";
    }
    elsif ($x ne$y){
    print "$x";
    }
  }
}

Может кто-нибудь, пожалуйста, помогите мне? Заранее большое спасибо! Rebi

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

Вот несколько простой способ.Перечень и переменная переключателя отслеживают, найден или отсутствует элемент:

my @a = ("Red", "Green", "Yellow");
my @b = ("Yellow", "Black","Yellow","Red", "White", "Yellow");
my $count = 0;
for my $ael (0 .. $#a) {
 my $switch = "off";
 for my $bel (00 .. $#b) {
  if ($a[$ael] eq $b[$bel]) {
  $count++;
  $switch = "on"; 
print "$b[$bel] found at index $bel\n";
                            }
                         }
print "$a[$ael] is missing\n" if $switch eq "off";  
                        }
print "Elements from B found $count times in A";

Выходы:

Red found at index 3
Green is missing
Yellow found at index 0
Yellow found at index 2
Yellow found at index 5
Elements from B found 4 times in A
0 голосов
/ 27 мая 2019

Вот пример:

my @A = ("Red", "Green", "Yellow");
my @B = ("Yellow", "Black","Yellow","Red", "White", "Yellow");
my %indices;
for my $i (0..$#B) {
    push @{ $indices{$B[$i]} }, $i;
}
my $count = 0;
for (@A) {
    if (exists $indices{$_} ) {
        my @temp = @{ $indices{$_} };
        $count += (scalar @temp);
        print "$_ is at index: ", @temp, "\n";
    }
    else {
        print "$_ is missing\n";
    }
}
print "Elements from B were detected ", $count, " times in A.\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...