Perl比较数组元素中的字符串

az31mfrm  于 8个月前  发布在  Perl
关注(0)|答案(1)|浏览(68)

数组的元素中包含以下信息

0 ABCD ABDC ACBD ABBC

1 ABCD AAAD ADBC BBAC

2 ABCD CCDB BDCB CABC

我正在尝试写一个子程序,将每个元素中的每个字符串与其他元素中的其他字符串进行比较,但我知道如何去做。例如,子程序应该打印ABCD存在于所有元素中。而ABDC不存在于所有元素中。谢谢你的帮助。

jexiocij

jexiocij1#

我经常使用的一个技巧是将其组织成一个散列,并让字符串作为键。在这种情况下,数组的散列,其中每个数组是可以找到字符串的原始元素的列表:

#!/usr/bin/perl
use warnings;
use strict;

sub compare;

my @array;
$array[0] = "ABCD ABDC ACBD ABBC";
$array[1] = "ACBD ABCD AAAD ADBC BBAC";
$array[2] = "ABCD CCDB BDCB CABC";

compare(@array);

sub compare(@)
{
        my %sorted;
        my $i = 0;
        foreach my $element (@_)
        {
                my @strings = split(/\s+/,$element);
                foreach my $string (@strings)   {       push(@{$sorted{$string}}, $i)   }
                $i++;
        }

        foreach my $string (keys(%sorted))
        {
#               print scalar(@{$sorted{$string}}) . "\n";
                if ( scalar(@{$sorted{$string}}) == scalar(@_) ) { print "$string present in all elements\n" }
                else { print "$string missing in some elements\n" }
        }

}

上面的代码打印:

ABBC missing in some elements
ABCD present in all elements
CCDB missing in some elements
ABDC missing in some elements
AAAD missing in some elements
BBAC missing in some elements
BDCB missing in some elements
ACBD missing in some elements
CABC missing in some elements
ADBC missing in some elements

如果你愿意,你可以使用子程序中的另一个打印行来获得更详细的报告。

**免责声明:**这段代码并不是为了优雅或高效而写的,而是为了以一种易于阅读的方式完成工作。嗯,只要数组的散列可以很容易地阅读,就是这样。

相关问题