Я хочу вставить в 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));
Как я могу сделать это с Rust 1.2.0?
В идеале я хотел бы поместить ключ в HashMap, но сохранить ссылку на него и разрешить доступ к элементам в нем с &str
типами без дополнительного выделения.
Существует ряд проблем с вашим кодом, поэтому трудно понять, что именно вы пытаетесь выполнить. Вы знаете о [Rust PlayPen] (https://play.rust-lang.org/?gist=d889c51118aeb8433832&version=stable)? Это отличный способ создать минимальную версию кода, которая фокусируется на вашей конкретной проблеме, поскольку она устраняет все эти досадные ошибки (например, отсутствующие «mut» в 'let map'), которые загрязняют ваше предложение. –
@ MatthieuM. крошечный нит, но в какой-то момент он был переименован в «Rust Playground». Я заметил, что на днях сам :-) – Shepmaster
Извините за ошибки, ребята, исправлено сейчас. –