我有一个 HashMap<(String, usize), f64>
。 我还有一个 &str
和一个 usize
,我想在这个 HashMap
中进行查找而不需要克隆。 有没有一种方法可以将 (&str, usize)
查找作为 (String, usize)
进行处理?
我有一个 HashMap<(String, usize), f64>
。 我还有一个 &str
和一个 usize
,我想在这个 HashMap
中进行查找而不需要克隆。 有没有一种方法可以将 (&str, usize)
查找作为 (String, usize)
进行处理?
HashMap<K,V>
的选项有:
entry
方法,需要通过值传递 K
,在您的情况下是一个 (String, usize)
- 因此您需要构造一个 String
。get
、contains_key
等都采用 "借用" 形式的 K
(文档中说 &Q
,其中 K: Borrow<Q>
;这意味着要么是 &(String, usize)
,要么是可以产生它的东西)。然而,有一种不需要分配字符串的方法来做到这一点。但是你需要更改你的Hashmap,所以键是类型为(std::borrow::Cow<'a, str>, usize)
(对于某些生命周期'a
)。然后你可以使用map.get((Cow::Borrowed(my_str_slice), 0))
来查找值。
Cow
,请参见https://dev59.com/11oV5IYBdhLWcg3wRs4w。 - tafiaHashMap<(&str, usize), f64>
有什么原因吗?也许是我对 Rust 的理解还不够,但这对我来说似乎是一个合理的解决方案。 - user25064String
的分配,也许映射的键是最自然的选择。不过,根据使用情况,将它们拆分开来可能是一个潜在的解决方案。 - Shepmaster