如何检查数组的任何元素是否在另一个数组中?

How to check if any element of array in another array?

我有字符串 aabbccddffgg 我需要检查它是否至少有一个来自数组的元素:["bb", "cc"].

在 D 中最好的方法是什么?

findcanFind支持可变数量的针,所以使用它们是最简单的:

"aabbccddffgg".canFind("bb", "cc");

了解有关 std.algorithm.searching.canFind here 的更多信息。 如果你不知道 compile-time 时的针数,这在一定程度上取决于你对字符串的了解程度,但天真的方法是在字符串:

auto eles = ["bb", "cc"];
eles.any!(e => "aabbccddffgg".canFind(e)))

如果您对子元素了解得更多,还有更好的方法。 例如,如果您知道所有针的长度均为 n,则可以创建大小为 n 的滑动 window 并检查您的针是否出现在滑动 windows:

之一中
auto eles = ["bb", "cc"];
"aabbccddffgg".slide(2).canFind!(e => eles.canFind!equal(e));

了解有关 std.range.slide here 的更多信息。 同样的想法也适用于一般情况:

auto eles = ["bb", "cc"];
string s = "aabbccddffgg";
s.enumerate
   .map!(e => s.drop(e.index))
   .canFind!(e => eles.canFind!(reverseArgs!startsWith)(e));

请注意 drop 使用切片并在 O(1) 中延迟发生,没有任何内存分配。

当然,还有更高效的方法和更高级的字符串匹配算法。