gpt4 book ai didi

rust - 在不同集合中使用 String 及其指针的安全有效方式

转载 作者:行者123 更新时间:2023-11-29 08:14:26 26 4
gpt4 key购买 nike

  • 我有一堆长的不可变字符串,我想将它们存储在 HashSet 中。
  • 我需要一堆以这些字符串为键的映射。
  • 我想使用对这些字符串的引用作为这些映射中的键,以避免复制字符串。

这就是我最终达到这种状态的方式。唯一的问题是我需要在第 5 行制作这个额外的副本。

let mut strings: HashSet<String> = HashSet::new();  // 1
let mut map: HashMap<&String, u8> = HashMap::new(); // 2
// 3
let s = "very long string".to_string(); // 4
strings.insert(s.clone()); // 5
let s_ref = strings.get(&s).unwrap(); // 6
map.insert(s_ref, 5); // 7

playground link

为了避免这种克隆,我找到了两个解决方法:

有什么明智的方法可以消除这种过度克隆吗?

最佳答案

在我看来,您正在寻找的是字符串实习。有一个图书馆,string-cache ,它是作为 Servo 项目的一部分开发的,可能会有帮助。

无论如何,基础很简单:

  • String 的长期池, 这保证他们根本不会移动
  • 避免在池中插入重复项的查找系统

您可以使用 typed arena存储您的 String , 然后存储 &str到那些字符串而不复制它们(只要竞技场存在,它们就会存在)。使用HashSet<&str>在顶部以避免重复,你就设置好了。

关于rust - 在不同集合中使用 String 及其指针的安全有效方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39205905/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com