我正在研究字符串搜索算法,并想知道.NET String.Contains函数用于什么算法。 反射器显示使用了这个功能,但我不知道它的名字是什么意思。
private static extern int InternalFindNLSStringEx(IntPtr handle, string localeName, int flags, string source, int sourceCount, int startIndex, string target, int targetCount);
答案 0 :(得分:8)
这只是通过文本和模式的嵌套循环实现的天真字符串搜索实现,具有O(n·m)运行时。
特别是,MSDN没有指定此方法的性能,因此假设性能更好是不安全的。
此外,大多数高级模式搜索方法对于某些字符串类型非常专业,而是更好的通用搜索算法,在String.IndexOf
中实现一个是某种不必要的优化。
原因很简单:如果您要求进行有效的模式搜索,那么无论如何您都会实施自己的,自定义以适合您的特定数据。所以没有必要在通用库中实现一些奇特的东西。
截至2016年(现在可以使用Core CLR源代码),实现仍在使用一个简单的嵌套循环。这是在NewApis::IndexOfString
和NewApis::FastIndexOfString
中实施的,这些内容来自托管InternalFindNLSStringEx
和String.Contains
函数(来自String.IndexOf
)。
答案 1 :(得分:0)
为什么在source code可用时使用反射器?
答案 2 :(得分:0)
我找不到那个方法存根,但我最好的猜测是对于不区分大小写的搜索,它是局部特定的大小写折叠。