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

时间:2014-04-02 20:59:07

标签: arrays perl subroutine

数组的元素

中包含以下信息
0 ABCD ABDC ACBD ABBC

1 ABCD AAAD ADBC BBAC

2 ABCD CCDB BDCB CABC

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

1 个答案:

答案 0 :(得分:1)

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

#!/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

如果需要,可以使用子中的其他打印行来获取更详细的报告。

免责声明:此代码不是优雅或高效的,而是以易于阅读的方式完成工作。好吧,只要数组的哈希值很容易读,就可以了。