Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Perl中比较数组的不同元素?_Perl_Arrays_Loops - Fatal编程技术网

如何在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";
    }
}