如何在Perl中比较数组的不同元素?
我是这个领域的新手。所以请对我宽容一点。我有两个阵列:如何在Perl中比较数组的不同元素?,perl,arrays,loops,Perl,Arrays,Loops,我是这个领域的新手。所以请对我宽容一点。我有两个阵列: @array1 = ("ABC321", "CDB672", "PLE89",....); @array2 = ("PLE89", "ABC678", "LMD789",...); 我想比较这两个不同数组的元素。但是,我只想将字母与字母匹配。因此,例如,如果比较数组,$array[2]元素(PLE)应该与$array2[0](PLE)匹配,类似地,$array1[0](ABC)应该与$array[1](ABC)匹配。我可以一次做一个,但
@array1 = ("ABC321", "CDB672", "PLE89",....);
@array2 = ("PLE89", "ABC678", "LMD789",...);
我想比较这两个不同数组的元素。但是,我只想将字母与字母匹配。因此,例如,如果比较数组,$array[2]
元素(PLE)应该与$array2[0]
(PLE)匹配,类似地,$array1[0]
(ABC)应该与$array[1]
(ABC)匹配。我可以一次做一个,但不能同时比较两个数组的所有元素(即循环数组)
关于如何同时为两个数组设置循环,有什么建议吗?语言不可知的建议是首先对两个数组进行排序(应该是O(n lg(n)),然后在线性时间内与两个迭代器进行比较。 如果性能不是一个问题,只需保持简单,然后进行二次成对比较即可。
在排序时,你也可以在最后去掉数字。语言不可知论者的建议是先对两个数组进行排序(应该取O(n lg(n)),然后在线性时间内与两个迭代器进行比较。 如果性能不是一个问题,只需保持简单,然后进行二次成对比较即可。
排序时,您还可以在最后去掉数字。您可以使用哈希作为查找设备,得到
O(m+n)
解决方案(其中m
是数组1的长度,n
是数组2的长度)
您可以使用散列作为查找设备并获得
O(m+n)
解决方案(其中m
是数组1的长度,n
是数组2的长度)
你到底想从结尾的
打印“length\n”
语句中得到什么?你想打印单词长度还是在某些东西上使用length函数?@Telemachus:这个想法不是打印长度。只要条件满足(两个数组中不同元素的字母匹配),这就是我写的任何单词。我只想比较数组中的所有元素,并存储/输出字母(如ABC、PBL)匹配的元素。@Birdy:我不认为你不希望每次得到匹配时都收到相同的消息,因为它不会告诉你太多。也就是说,当你得到匹配时,你会一遍又一遍地看到“长度”(下一个匹配)“长度”(下一个匹配)“长度”(下一个匹配)“长度”,但您不知道哪些项是匹配的。如果查看所有解决方案,它们的一个共同点是,这些消息试图告诉用户哪些项与哪些项匹配。您希望从打印“length\n”中得到什么
结尾的语句?您想打印单词长度还是在某些东西上使用长度函数?@Telemachus:我们的想法不是打印长度。如果条件满足(两个数组中不同元素的字母匹配),这只是我写的要打印的任何单词。我只想比较数组中的所有元素,并存储/输出字母(如ABC、PBL)匹配的元素。@Birdy:我不认为你不希望每次得到匹配时都收到相同的消息,因为它不会告诉你太多。也就是说,当你得到匹配时,你会一遍又一遍地看到“长度”(下一个匹配)“长度”(下一个匹配)“长度”(下一个匹配)“长度”,但您不知道哪些项匹配。如果查看所有解决方案,它们的一个共同点是,这些消息试图告诉用户哪些项匹配哪些项。
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";
}
#!/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";
}
}