Ответ 1
Используйте Iterator::collect
:
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,
С другой стороны, любой итератор кортежей, где первое значение может быть хэшированным и по сравнению с общим равенством можно преобразовать в HashMap
. Параметр S
не интересен для обсуждения, он просто определяет, что такое метод хеширования.