在第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;
我希望对两个字符串列表都这样做(不区分大小写)。有什么有效的方法吗?
在第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;
我希望对两个字符串列表都这样做(不区分大小写)。有什么有效的方法吗?
5条答案
按热度按时间ztmd8pv51#
Array::Utils就是您要查找的内容。
这将生成以下预期输出
**编辑:**我没有注意到您希望不区分大小写。在这种情况下,您可以将
@a
替换为map{lc}@a
(同样,也可以将@b
替换为@a
)。xqk2d5yq2#
对原始解决方案所做的最小更改。仅将字符串小写。
w3nuxt5m3#
以下是一种
map
/grep
方法:6yoyoihd4#
您也可以使用List::MoreUtils模块中的duplicates函数,如下所示:
这将等于上面提到的Array::Utils模块的交集。
ecfdbz9o5#
给予
1)我在某个地方找到了这个解决方案,但我不记得是在哪里了。如果有人知道,请告诉我。
2)我不知道这与其他解决方案相比有多高效。
3)真诚地说,我不知道这是怎么回事。为什么有分号而没有逗号?