支持 String 和 &str 的 Hashmap
A Hashmap supporting String and &str
如何定义一个在其键和内容中同时支持 String
和 &str
的 HashMap?我尝试了以下方法:
fn mapping<T: Into<String>>() -> HashMap<T, T> {
let mut map: HashMap<T, T> = HashMap::new();
map.insert("first_name", "MyFirstName");
map.insert("last_name".to_string(), "MyLastName".to_string());
map
}
fn main() {
let mut mapping = mapping();
}
但是编译不通过,说:
error[E0599]: no method named `insert` found for type `std::collections::HashMap<T, T>` in the current scope
error[E0277]: the trait bound `T: std::cmp::Eq` is not satisfied
error[E0277]: the trait bound `T: std::hash::Hash` is not satisfied
抽象数据是借用还是拥有的 built-in 方法是 Cow
。
use std::borrow::Cow;
use std::collections::HashMap;
fn mapping() -> HashMap<Cow<'static, str>, Cow<'static, str>> {
let mut map = HashMap::new();
map.insert("first_name".into(), "MyFirstName".into());
map.insert("last_name".to_string().into(), "MyLastName".to_string().into());
map
}
&str
和 String
都可以使用 .into()
转换为 Cow<str>
。
如何定义一个在其键和内容中同时支持 String
和 &str
的 HashMap?我尝试了以下方法:
fn mapping<T: Into<String>>() -> HashMap<T, T> {
let mut map: HashMap<T, T> = HashMap::new();
map.insert("first_name", "MyFirstName");
map.insert("last_name".to_string(), "MyLastName".to_string());
map
}
fn main() {
let mut mapping = mapping();
}
但是编译不通过,说:
error[E0599]: no method named `insert` found for type `std::collections::HashMap<T, T>` in the current scope
error[E0277]: the trait bound `T: std::cmp::Eq` is not satisfied
error[E0277]: the trait bound `T: std::hash::Hash` is not satisfied
抽象数据是借用还是拥有的 built-in 方法是 Cow
。
use std::borrow::Cow;
use std::collections::HashMap;
fn mapping() -> HashMap<Cow<'static, str>, Cow<'static, str>> {
let mut map = HashMap::new();
map.insert("first_name".into(), "MyFirstName".into());
map.insert("last_name".to_string().into(), "MyLastName".to_string().into());
map
}
&str
和 String
都可以使用 .into()
转换为 Cow<str>
。