2 个版本
0.9.1 | 2020 年 9 月 19 日 |
---|---|
0.9.0 | 2020 年 9 月 19 日 |
#4 在 #trie-node
16KB
321 行
alias_trie
支持别名节点的 trie。它可以轻松快速地处理由于缩写、缩写或日常语法中的缩写引起的语法歧义,并提供正确快速的检索能力。
lib.rs
:
alias_trie
是一个支持别名节点的 trie。可以为每个节点设置一个或多个别名,以便可以通过别名检索存储的值。不幸的是,搜索路径中的别名可能冲突,使得无法定位特定的节点。这种情况称为语法歧义,搜索无法使用歧义语法完成。
alias_trie
可以轻松快速地处理由于缩写、缩写或日常语法中的缩写引起的语法歧义,并提供正确快速的检索能力。
ROOT
↙ ↘
A(a): 1 G: 5
↙ ↓ ↘ // The alias "f" conflicts.
B C: 4 D(d,dd): 2 // The path "A->d->f" is an ambiguous grammar.
↓ ↙ ↘
E(eee): 2 F1(f): 3 F2(f,f2): 4
用法
这个crate在crates.io上,可以通过将 alias_trie
添加到你的项目的 Cargo.toml
依赖中来实现。
[dependencies]
alias_trie = "0.9"
示例
use alias_trie::Trie;
use alias_trie::UniqueOption;
let mut trie = Trie::new();
trie.insert(&["A"], 1);
trie.insert(&["A", "B", "E"], 2);
trie.insert(&["A", "C"], 4);
trie.insert(&["A", "D"], 2);
trie.insert(&["A", "D", "F1"], 3);
trie.insert(&["A", "D", "F2"], 4);
trie.insert(&["G"], 5);
trie.update_aliases(&["A", "B", "E"], &[&["a"], &[], &["eee"]]);
trie.update_aliases(&["A", "D", "F1"], &[&[], &["d", "dd"], &["f"]]);
trie.update_aliases(&["A", "D", "F2"], &[&[], &[], &["f", "f2"]]);
assert_eq!(trie.get(&["a", "d", "F1"]), UniqueOption::Some(&3));
assert_eq!(trie.get(&["a", "d", "f2"]), UniqueOption::Some(&4));
assert_eq!(trie.get(&["a", "d", "f"]), UniqueOption::NonUnique);
assert_eq!(trie.get(&["a", "d", "g"]), UniqueOption::None);
!
依赖
~2.2–3MB
~53K SLoC