即使键在Rust中是String,也可以将Entry与&str一起使用?

时间:2019-01-07 19:27:54

标签: string hashmap rust

我正在解决与How to lookup from and insert into a HashMap efficiently?中的问题类似的问题。我有一个带有stat键的映射,我想编写一个函数,如果键存在,则返回键的值;如果不存在,则计算并插入键的值。

从该问题的答案来看,我知道执行此操作的正确方法是使用String。所以我写了这个:

Entry

现在我的问题是我不能再使用fn get_or_calculate(&self, key: &str) -> u64 { match self.map.entry(key) { Entry::Occupied(o) => o.get(), Entry::Vacant(v) => v.insert(2 + 2), } } 来查找值。 &str愉快地接受map.get(),而&str需要一个map.entry()才能拥有以下所有权:

String

我可以只使用error[E0308]: mismatched types --> src/lib.rs:15:30 | 15 | match self.map.entry(key) { | ^^^ | | | expected struct `std::string::String`, found &str | help: try using a conversion method: `key.to_string()` | = note: expected type `std::string::String` found type `&str` ,但我知道这样做可能会很昂贵。感觉有点不必要-因为to_string()的功能没有超出我的功能,所以不需要获取字符串的所有权。

即使键为Entry,也可以将Entry&str一起使用吗?我可以不使用String来重写代码吗?

0 个答案:

没有答案