Вопрос по arrays, perl – Как я могу сравнить различные элементы массива в Perl?
Я новичок в этой области. Так что будь добр ко мне. У меня есть два массива:
@array1 = ("ABC321", "CDB672", "PLE89",....);
@array2 = ("PLE89", "ABC678", "LMD789",...);
Я хочу сравнить элементы этих двух разных массивов. Но я хочу сопоставлять буквы только с буквами. Так, например, если сравниваются массивы,$array[2]
элемент (PLE) должен совпадать с$array2[0]
(PLE) и аналогично$array1[0]
(ABC) должен совпадать с$array[1]
(АВС). Я могу сделать это по одному, но не могу сравнить все элементы обоих массивов одновременно (то есть зацикливание массивов).
my ($value1)= ($array[2]=~ /([A-Z]+)[0-9]+/);
print "Value1: $value1 \n";
my ($value2)= ($array[0]=~ /([A-Z]+)[0-9]+/);
print "Value2 : $value2 \n";
if ($value1 eq $value2){
print " length \n";
}
Любые предложения о том, как настроить цикл для обоих массивов одновременно?
@Telemachus: идея не в том, чтобы напечатать длину. Это просто любое слово, которое я написал для печати, если выполняется условие (буквы из разных элементов в двух массивах совпадают). Я только хочу сравнить все элементы массива и сохранить / вывести те, в которых совпадают буквы (например, ABC, PBL).
birdy
@ Берди: Я не думаю, что вы не хотите получать одно и то же сообщение каждый раз, когда получаете совпадение, так как оно мало что вам говорит. То есть, когда вы получаете совпадения, вы будете видеть снова и снова & quot; длина & quot ;, (следующий матч) & quot; длина & quot ;, (следующий матч) & quot; длина & quot ;, но вы не знаете, какие элементы совпадают. Если вы посмотрите на все решения, их объединяет то, что сообщения пытаются рассказать пользователю о том, что и что соответствует.
Telemachus
Что именно вы хотите от
print " length \n";
заявление в конце? Вы хотите напечатать длину слова или использовать функцию длины на чем-то?
Telemachus
2
ответа
O(m+n)
решение (гдеm
длина массива1 иn
это длина массива2).
#!/usr/bin/perl
use strict;
use warnings;
my @array1 = qw(ABC321 CDB672 PLE89);
my @array2 = qw(PLE89 ABC678 LMD789);
my %seen;
for my $item (@array1) {
die "not a valid item: $item"
unless my ($key) = $item =~ /([A-Z]+)/;
#we are using an array to hold the items in case
#the same key shows up more than once in an array
#this code can be simpler if you can guarantee
#that the keys are unique
push @{$seen{$key}}, $item;
}
for my $item (@array2) {
die "not a valid item: $item"
unless my ($key) = $item =~ /([A-Z]+)/;
if (exists $seen{$key}) {
print "$item is in array1, it matches @{$seen{$key}}\n";
} else {
print "$item is not in array1\n";
}
}
Похожие вопросы
@Telemachus: идея не в том, чтобы напечатать длину. Это просто любое слово, которое я написал для печати, если выполняется условие (буквы из разных элементов в двух массивах совпадают). Я только хочу сравнить все элементы массива и сохранить / вывести те, в которых совпадают буквы (например, ABC, PBL).
@ Берди: Я не думаю, что вы не хотите получать одно и то же сообщение каждый раз, когда получаете совпадение, так как оно мало что вам говорит. То есть, когда вы получаете совпадения, вы будете видеть снова и снова & quot; длина & quot ;, (следующий матч) & quot; длина & quot ;, (следующий матч) & quot; длина & quot ;, но вы не знаете, какие элементы совпадают. Если вы посмотрите на все решения, их объединяет то, что сообщения пытаются рассказать пользователю о том, что и что соответствует.
Что именно вы хотите от<code>print " length \n";</code> заявление в конце? Вы хотите напечатать длину слова или использовать функцию длины на чем-то?