在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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |