2 个版本
0.0.2 | 2024 年 5 月 30 日 |
---|---|
0.0.1 | 2024 年 5 月 30 日 |
#890 在 数据结构
7KB
102 行
PrefixDictionary
PrefixDictionary 类似于字典,但允许通过前缀进行搜索。它的底层结构是 n 叉树。
它是关于数据的泛型(模板),但最常见的使用是与字符一起。
伪代码
a = PrefixDictionary("dictionary", "lapin", "lapins", "lapine")
- a.contains("dict") -> as_prefix 因为 "dict" 不在单词列表中,但仅是一个前缀
- a.contains("dictionary") -> as_word 因为 "dictionary" 是一个实际的单词,且不再有单词存在
- a.contains("lapin") -> as_prefix | as_word 因为 "lapin" 既是单词也是前缀(对于 "lapins" 和 "lapine")
- a.contains("tutu") -> None 因为 tutu 不在字典中
注意
在上述示例中,只读取单词 "tutu" 的第一个字母 t
,因为我们知道(从字典的结构中),没有单词以字母 t
开头。
示例
pub fn test_simple_1() {
let mut dict = PrefixDictionary::new();
dict.feed(&["dictionary", "lapin", "lapins", "lapine"]);
assert_eq!(4, dict.len());
let mut result = dict.contains("dict");
assert!(result.is_some());
assert_eq!(result.unwrap(), SearchResult::AS_PREFIX);
result = dict.contains("lapin");
assert!(result.is_some());
assert_eq!(result.unwrap(), SearchResult::AS_PREFIX | SearchResult::AS_WORD);
result = dict.contains("dictionary");
assert!(result.is_some());
assert_eq!(result.unwrap(), SearchResult::AS_WORD);
result = dict.contains("tutu");
assert!(result.is_none());
}
依赖项
~110KB