假设我有$sentence = "The quick brown fox jumps over the lazy dog"
和一个数组@targets = qw(brown red black lazy quick);
。
我们的目标是找出@targets
中的所有单词,即包含在$sentence
中的单词,在本例中,就是这三个单词:brown lazy quick
.
注意:@targets
数组可能非常大,比如有10,000个元素,也可能有10,000个$sentence
需要处理。
有没有一种高效而优雅的方法来做到这一点?
5条答案
按热度按时间vhipe2zx1#
看看这个逻辑是否有助于您:
输出:
56lgkhnf2#
使用Algorithm::AhoCorasick::XS可以非常高效地搜索多个字符串:
示例:
3pvhb19x3#
以下是使用
Regexp::Assemble
的示例:输出:
wribegjk4#
我对其他答案中的方法进行了快速比较:
输出:
因此,对于此设置,
aho_corasick
是最快的。编辑:
如果我们提前做好第一步准备,我们会发现
aho_corasick
甚至更快:现在的结果是:
wj8zmpe15#
仅使用纯Perl
输出量