我尝试使用Rust集合(如BTreeMap)来存储键值对以用作排序列表,但我发现它只与精确键匹配 . 例如,在电话簿案例中,我可以找到具有精确键“David”的项目,但不能找到以“Dav”开头的项目:
use std::collections::BTreeMap;
fn main() {
let mut map = BTreeMap::new();
map.insert("Daniel", "798-1364");
// FOUND WITH EXACT MATCH ONLY
// like map.get(&"Daniel"), Not Found Here
match map.get(&"Dan") {
Some(&number) => println!("Found: {}", number),
_ => println!("Not Found."),
}
}
我可以使用 BTreeMap
等集合对字符串前缀进行部分匹配吗?
此外,如果我的密钥是 i64
s,我可以找到一系列项目,例如当密钥大于1000时?我知道如何遍历所有项目,但我想迭代所找到的项目范围 .
我可以通过索引访问项目,手动进行二进制搜索吗?
1 回答
你可以用BTreeMap::range做你喜欢的部分:
这打印:
您可以扩展循环以进行“启动”检查,一旦您不再匹配前缀,该检查将退出:
此概念扩展到整数键大小写,但您也可以指定一个完整范围来将搜索限制为: