【问题标题】:Look up key in HashMap<(String, usize), f64> in Rust [duplicate]在 Rust 中查找 HashMap<(String, usize), f64> 中的键 [重复]
【发布时间】:2016-10-16 05:27:59
【问题描述】:

我有一个HashMap&lt;(String, usize), f64&gt;。我还有一个&amp;str 和一个usize,我想在这个HashMap 中查找它们而不进行克隆。有没有办法以某种方式将(&amp;str, usize) 查找为(String, usize)

【问题讨论】:

  • 如果可能,你必须使用Cow,见stackoverflow.com/questions/36480845/…
  • 有什么理由不想使用HashMap&lt;(&amp;str, usize), f64&gt;?可能是我对 rust 的理解不够深入,但这对我来说似乎是一个合理的解决方案。
  • @user25064 的东西需要持有String 的分配,也许map 的key 是最自然的。不过,将两者分开是一种潜在的解决方案,具体取决于用例。

标签: rust


【解决方案1】:

不,你不能。在HashMap&lt;K,V&gt; 中查找的选项是:

  • entry 方法,它需要一个 K 按值,在你的情况下是一个 (String, usize) - 所以你需要构造一个 String
  • 各种getcontains_key 等都采用K 的“借用”形式(文档说&amp;Q,其中K: Borrow&lt;Q&gt;;这意味着&amp;(String, usize) 或可以产生的东西一个。

从技术上讲,您可以遍历它并进行自己的比较,但这可能不是您想要的!

【讨论】:

  • 请注意,这不再适用。在 2018 版中,您可以使用 &str 查找字符串键。
【解决方案2】:

但是,有一种方法可以做到这一点,它不涉及分配字符串。但是你必须改变你的 Hashmap,所以 key 的类型是 (std::borrow::Cow&lt;'a, str&gt;, usize)(在某些生命周期内是 'a)。然后您可以使用map.get((Cow::Borrowed(my_str_slice), 0)) 查找值。

【讨论】:

    猜你喜欢
    • 2017-01-30
    • 1970-01-01
    • 2018-01-18
    • 2016-03-31
    • 2017-11-03
    • 1970-01-01
    • 2017-08-21
    • 2021-09-27
    • 2016-04-10
    相关资源
    最近更新 更多