在Scala中,有一个名为toMap
的方法适用于任何元组列表并将其转换为一个映射,其中键是元组中的第一个项,值是第二个:
val listOfTuples = List(("one", 1), ("two", 2))
val map = listOfTuples.toMap
Rust中toMap
最接近的是什么?
答案 0 :(得分:26)
use std::collections::HashMap;
fn main() {
let tuples = vec![("one", 1), ("two", 2), ("three", 3)];
let m: HashMap<_, _> = tuples.into_iter().collect();
println!("{:?}", m);
}
collect
利用FromIterator
trait。可以将任何迭代器收集到实现FromIterator
的类型中。在这种情况下,HashMap
将其实现为:
impl<K, V, S> FromIterator<(K, V)> for HashMap<K, V, S>
where
K: Eq + Hash,
S: HashState + Default,
换句话说,元组的任何迭代器都可以将第一个值be hashed和compared for total equality转换为HashMap
。 S
参数并不令人兴奋,它只是定义了散列方法的内容。
另见:
答案 1 :(得分:0)
由于尚未提及,因此这里是一行(尽管很长)的方法:
use std::collections::HashMap;
fn main() {
let m: HashMap<&str, u16> = [("year", 2019), ("month", 12)].iter().cloned().collect();
println!("{:?}", m);
}
或者您可以进行特质:
use std::collections::HashMap;
trait Hash {
fn to_map(&self) -> HashMap<&str, u16>;
}
impl Hash for [(&str, u16)] {
fn to_map(&self) -> HashMap<&str, u16> {
self.iter().cloned().collect()
}
}
fn main() {
let m = [("year", 2019), ("month", 12)].to_map();
println!("{:?}", m)
}
https://doc.rust-lang.org/std/collections/struct.HashMap.html#examples