所以如果file1包含:
Sally Joe Tom SuzIE
而file2包含:
Sally SuzIE Harry Tom
然后输出文件应包含:
Joe解决方法 创建一个包含文件2中每一行的hashmap.然后,对于文件1中的每一行,如果它不在hashmap中,则输出它.这将是O(N),这是您可以实现的最佳效率等级,因为您必须阅读输入.
Perl实现:
#!/usr/bin/env perluse warnings;use strict;use Carp ();my $file1 = 'file1.txt';my $file2 = 'file2.txt';my %map;{ open my $in,'<',$file2 or Carp::croak("Cant open $file2"); while (<$in>) { $map{$_} = 1; } close($in) or Carp::carp("error closing $file2");}{ open my $in,$file1 or Carp::croak("Cant open $file1"); while (<$in>) { if (!$map{$_}) { print $_; } } close $in or Carp::carp("error closing $file1");}
如果文件2太大以至于hashmap不适合内存,那么我们手头就有了不同的问题.然后可能的解决方案是在文件2的块上使用上述解决方案(小到足以装入内存),将结果输出到临时文件.如果文件1和文件2之间有足够的匹配,那么总输出应该是合理的大小.为了计算最终结果,我们在临时文件中执行行的交集,即,对于在最终结果中的行,它必须在每个临时文件中出现.
总结以上是内存溢出为你收集整理的在Perl中获取file2中没有出现的所有行的最快方法是什么?全部内容,希望文章能够帮你解决在Perl中获取file2中没有出现的所有行的最快方法是什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)