找到两个文件中共有的行
— 焉知非鱼Find the Common Lines in Two Files
找出两个文件中共有的行, 顺序无关紧要 #
在 Perl 5 里, 你可以这样:
#!/usr/bin/env perl
use 5.010; use warnings; use strict;
my %filea = map { $_ => 1 } do { open my $fa, '<', 'filea' or die $!; <$fa> };
my %fileb = map { $_ => 1 } do { open my $fb, '<', 'fileb' or die $!; <$fb> };
for( keys %filea ){
print if $fileb{$_};
}
在 Raku 中就长这样:
#!/usr/bin/env raku
my @a := "filea".IO.lines;
my @b := "fileb".IO.lines;
.say for keys( @a ∩ @b );
因为 Raku 中的"惰性列表”, 底层实现能把工作分割成不同的任务并行执行, 然后在需要结果的时候返回给它们。所以, 这种情况下, @a
和 @b
的填充可以同时运行.但是要点是, 如果你有耗费时间, 不彼此依赖的操作, 或者函数 A 要传递一个 item 列表给函数 B, 这些操作可能并行执行, 提高速度, 你不需要做任何线程相关的东西。非常赞!