我想插入到HashMap中,但保留密钥的不可变借用以传递到地方。在我的情况下,键是字符串。如何在密钥插入HashMap后保留对密钥的引用?
这是一种方式:
use std::collections::HashMap;
let mut map = HashMap::new();
let id = "data".to_string(); // This needs to be a String
let cloned = id.clone();
map.insert(id, 5);
let one = map.get(&cloned);
let two = map.get("data");
println!("{:?}", (one, two));
但是这需要一个克隆。
这一个工作,直到锈1.2.0:
use std::collections::HashMap;
use std::rc::Rc;
use std::string::as_string;
let mut map = HashMap::new();
let data = Rc::new("data".to_string()); // This needs to be a String
let copy = data.clone();
map.insert(data, 5);
let one = map.get(©);
let two = map.get(&*as_string("data"));
println!("{:?}", (one, two));
我怎么能带锈1.2.0做到这一点?
理想情况下,我想将一个关键字放入HashMap中,但保留对它的引用,并允许我使用&str
类型访问其中的元素,而不需要额外分配。
您的代码存在一系列问题,因此很难准确理解您要完成的工作。你知道[Rust PlayPen](https://play.rust-lang.org/?gist=d889c51118aeb8433832&version=stable)吗?这是生成最小版本代码的好方法,专注于您的确切问题,因为它消除了污染您的提议的所有麻烦错误(如'let map中缺少的'mut')。 –
@MatthieuM。小尼特,但在某些时候,它被改名为“铁锈游乐场”。我注意到,有一天我自己:-) – Shepmaster
对不起,错误的家伙,现在修复。 –