加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在perl中比较字符串数组的最佳方法是什么

发布时间:2020-12-16 06:14:18 所属栏目:大数据 来源:网络整理
导读:我正在尝试比较包含目录文件列表的多个字符串数组.目标是确定每个目录中存在哪些文件以及哪些文件不存在.考虑: List1 List2 List3 List4a a e fb b d gc f a h 结果应该是: 列表1: List1 List2 List3 List4 a yes yes yes no b yes yes no no c yes no no
我正在尝试比较包含目录文件列表的多个字符串数组.目标是确定每个目录中存在哪些文件以及哪些文件不存在.考虑:

List1    List2    List3    List4
a        a        e        f
b        b        d        g
c        f        a        h

结果应该是:

列表1:

List1    List2    List3    List4
 a      yes      yes      yes      no
 b      yes      yes      no       no
 c      yes      no       no       no

列表2:

List1    List2    List3    List4
 a      yes      yes      yes      no
 b      yes      yes      no       no
 f      no       yes      no       yes

我可以遍历所有数组并遍历每个条目,遍历所有其他数组并执行grep:

for my $curfile (@currentdirfiles) {
   if( grep(/$curfile/,@otherarrsfiles) ) {
        // Set 'yes'
   } else {
        // set 'no'
   }
 }

我唯一担心的是我最终得到的是0 ^ 2n数量级.我可能无法对此做任何事情,因为无论如何我最终会遍历所有数组.一个改进可能在grep函数中,但我不确定.

有什么想法吗?

解决方法

现在问题已被修改,这就产生了你想要的答案.它在O(n3)时间内工作,这对于问题是最佳的(有n3个输出).

#!/usr/bin/env perl

use strict;
use warnings;

#List1    List2    List3    List4
#a        a        e        f
#b        b        d        g
#c        f        a        h

my(@lists) = ( { a => 1,b => 1,c => 1 },{ a => 1,f => 1 },{ e => 1,d => 1,a => 1 },{ f => 1,g => 1,h => 1 },);

my $i = 0;
foreach my $list (@lists)
{
    analyze(++$i,$list,@lists);
}

sub analyze
{
    my($num,$ref,@lists) = @_;
    printf "List %dn",$num;

    my $pad = "     ";
    foreach my $i (1..4)
    {
        print "$pad   List$i";
        $pad = "";
    }
    print "n";

    foreach my $file (sort keys %{$ref})
    {
        printf "%-8s",$file;
        foreach my $list (@lists)
        {
            my %dir = %{$list};
            printf "%-8s",(defined $dir{$file}) ? "yes" : "no";
        }
        print "n";
    }
    print "n";
}

我得到的输出是:

List 1
        List1   List2   List3   List4
a       yes     yes     yes     no      
b       yes     yes     no      no      
c       yes     no      no      no      

List 2
        List1   List2   List3   List4
a       yes     yes     yes     no      
b       yes     yes     no      no      
f       no      yes     no      yes     

List 3
        List1   List2   List3   List4
a       yes     yes     yes     no      
d       no      no      yes     no      
e       no      no      yes     no      

List 4
        List1   List2   List3   List4
f       no      yes     no      yes     
g       no      no      no      yes     
h       no      no      no      yes

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读