10 个版本 (稳定)
1.3.1 | 2022 年 9 月 19 日 |
---|---|
1.3.0 | 2021 年 9 月 21 日 |
1.2.1 | 2021 年 7 月 20 日 |
1.1.1 | 2020 年 12 月 18 日 |
0.1.1 | 2020 年 6 月 9 日 |
#281 in GUI
每月 341 次下载
23KB
307 行
rs-complete
rs-completion 是一个库,当您想在项目中实现制表符补全(或类似功能)时使用。
rs-completion 主要为了内存效率而构建。补全存储在二叉树中,每个节点包含一定数量的字符。这些字符进一步链接到新的节点。因此,相似的单词会共享内存。
视觉示例
// 'c' - 'a' - 'v' - 'e'
// /
// root - 'b' - 'a' - 't' - 'm' - 'a' - 'n'
// \
// 'o' - 'b' - 'i' - 'l' - 'e'
这意味着在最坏的情况下,您可能有 25^25 个节点在内存中,其中 25 是您字母表的大小。但这意味着您在内存中保留了所有可想象到的字符组合,而不考虑辅音或动词规则。如果您需要这样做,那么您不需要库来处理。
我无法争论这种解决方案是否快速或高效。它已经解决了我在创建库时试图解决的问题。如果您有扩展或改进的想法,我将很高兴看到它们。
示例
extern crate rs_completion;
use rs_completion::CompletionTree;
let mut completions = CompletionTree::default();
completions.insert("large bunch of words that bungalow we want to be bundesliga able to complete");
assert_eq!(
completions.complete("bun"),
Some(vec!["bunch", "bundesliga", "bungalow"].iter().map(|s| s.to_string()).collect()));
依赖项
~130KB