我想插入到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
對不起,錯誤的傢伙,現在修復。 –