我收集了大量数据,在这种情况下,想象一个 80,000 多个 String
数组,所有这些都包含文件路径。
作为文件路径,这意味着大量的文件路径以相同的路径开始,例如我有超过 50,000 个文件以 "/dataset1/subsetAA/childX/"
开头。
我想允许对这些路径进行自由文本搜索。现在我用一个简单的谓词来做到这一点,看起来像这样:
foreach(String term in terms)
if( path.IndexOf( term, StringComparison.OrdinalIgnoreCase ) == -1 )
return false;
return true;
我会在输入搜索结果时保存搜索结果,因此输入越多,搜索结果就会越快,但是最初的几次搜索(例如“f
”>“fo
"> "foo
") 即使在速度很快的机器上也可能需要 3 或 4 秒。
我想建立一个子字符串索引,这样我就不需要使用 IndexOf
,最好是利用公共(public)路径来减少索引大小的索引,我不想消耗太多很多内存。
最佳答案
了解称为 Trie 的数据结构:http://en.wikipedia.org/wiki/Trie
它做的正是你想要的,它需要很多字符串并用普通前缀构建一棵树,带有字符串,每个叶子都是一个字符串,它遵循其父项中的一系列前缀(你可以通过连接它的所有前缀来构建)叶子中的 parent ,以节省空间)
关于c# - 子串索引许多相似的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15401579/