获取Perl中两个字符串列表的交集

Qia*_* Li 9 perl

在第4章第4.8节(计算联盟,交集或唯一列表的差异)中,Perl Cookbook提供了这种技术来获取两个整数列表的交集:

@a = (1, 3, 5, 6, 7, 8);
@b = (2, 3, 5, 7, 9);
...
foreach $e (@a, @b) {
    $union{$e}++ && $isect{$e}++
}
@union = keys %union;
@isect = keys %isect;
Run Code Online (Sandbox Code Playgroud)

我想要为两个字符串列表完成(不区分大小写).请问有效的方法吗?

小智 17

Array :: Utils就是你要找的.

use Array::Utils qw(:all);

my @a = qw( a b c d );
my @b = qw( c d e f );

my @isect = intersect(@a, @b);
print join(",",@isect) . "\n";
Run Code Online (Sandbox Code Playgroud)

这产生了预期的输出

c,d
Run Code Online (Sandbox Code Playgroud)

编辑: 我没有注意到你想要这样做不区分大小写.在这种情况下,您可以替换@amap{lc}@a(以及同样@b).