如何检查数组的任何元素是否在另一个数组中?
How to check if any element of array in another array?
我有字符串 aabbccddffgg
我需要检查它是否至少有一个来自数组的元素:["bb", "cc"]
.
在 D 中最好的方法是什么?
find
和canFind
支持可变数量的针,所以使用它们是最简单的:
"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) 中延迟发生,没有任何内存分配。
当然,还有更高效的方法和更高级的字符串匹配算法。
我有字符串 aabbccddffgg
我需要检查它是否至少有一个来自数组的元素:["bb", "cc"]
.
在 D 中最好的方法是什么?
find
和canFind
支持可变数量的针,所以使用它们是最简单的:
"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) 中延迟发生,没有任何内存分配。
当然,还有更高效的方法和更高级的字符串匹配算法。