4 个版本
0.1.3 | 2023 年 10 月 26 日 |
---|---|
0.1.2 | 2023 年 10 月 23 日 |
0.1.1 | 2023 年 10 月 23 日 |
0.1.0 | 2023 年 10 月 23 日 |
#1450 在 数据结构
21 每月下载量
8KB
60 行
自动完成
描述
Dictionary
结构存储一组单词,每个单词都有其对应的权重。在这个结构中,每个单词都表示为树中的路径,路径上的每个节点对应单词中的一个字符。终端节点同时保存单词及其权重。
这些终端节点存储完整的单词以加速查找,消除了回溯和从单个字符重建单词的需要。权重用于对结果向量中的条目进行排序,其中权重更大的单词将位于开头。
pub struct Dictionary<T> {
entries: BTreeMap<char, Dictionary<T>>,
terminal: Option<Terminal<T>>,
}
struct Terminal<T> {
weight: T,
word: String,
}
例如,单词
A, 1
AA, 5
ABC, 3
将表示为
Dictionary {
terminal: None,
entries: {
'A': Dictionary {
terminal: Some({
weight: 1,
word: "A",
})
entries: {
'A': Dictionary {
terminal: Some({
weight: 5,
word: "AA"
}),
entries: {},
},
'B': Dictionary {
terminal: None,
entries: {
'C': Dictionary {
termainal: Some({
weight: 3,
word: "ABC",
})
entries: {},
},
},
},
},
},
},
}
用法
build
和 build_without_weights
方法提供了一种方便的方式来从单词列表初始化和构建 Dictionary
对象,带有或不带权重。这些方法抽象掉了手动将每个单词插入字典的细节,使您在代码中创建和使用 Dictionary
对象变得更容易。
// Example using build method
let words_with_weights = vec![
("A".to_string(), 1),
("AA".to_string(), 5),
("ABC".to_string(), 3),
];
let dictionary = Dictionary::<usize>::build(words_with_weights);
// Example using build_without_weights method
let words = vec![
"A".to_string(),
"AA".to_string(),
"ABC".to_string(),
];
let dictionary_unweighted = Dictionary::<usize>::build_without_weights(words);
要按前缀查询 Dictionary
,请使用 words
方法。
// Example using words
dictionary.words("A")
// [
// ("AA", 5),
// ("ABC", 3),
// ("A", 1),
// ]
安装
该软件包可在 crates.io 获取
许可证
本项目采用 MIT 许可证。有关详细信息,请参阅 LICENSE 文件。