c# - 子串索引许多相似的字符串

标签 c# string indexing

我收集了大量数据,在这种情况下,想象一个 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/

相关文章:

C#:当上下文菜单的菜单项链接到两个不同的对象时,如何检测谁是调用者?

c# - 当输入为 Null 时,将解析处理为 float

c - 为什么我的程序没有打印出正确的消息?

mysql - 如何索引该表(a_level、b_level、item_id)

c# - WPF 数据虚拟化和 DataGrid

c# - 林克扩展。更改源列表中的属性值

c - 就地替换字符串中的字符

c# - 如何胜过这个正则表达式替换?

python - 列表索引超出范围(使用 while 循环)

search - 在索引时而不是在 Solr 中查询时应用字段提升的好处?