2015-05-25 14 views
10

Trong Scala, có một phương thức có tên toMap hoạt động trên bất kỳ danh sách các hàng và chuyển đổi nó thành một bản đồ nơi quan trọng là mục đầu tiên trên tuple và giá trị là lần thứ hai một:Làm cách nào để tạo bản đồ từ danh sách theo cách chức năng?

val listOfTuples = List(("one", 1), ("two", 2)) 
val map = listOfTuples.toMap 

gì là điều gần nhất với toMap trong Rust là gì?

Trả lời

14

Sử dụng 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 thúc đẩy các FromIterator trait. Bất kỳ trình lặp nào cũng có thể được thu thập thành một loại thực hiện FromIterator. Trong trường hợp này, HashMap thực hiện nó như:

impl<K, V, S> FromIterator<(K, V)> for HashMap<K, V, S> 
where 
    K: Eq + Hash, 
    S: HashState + Default, 

Nói cách khác, bất kỳ lặp của các bộ trong đó giá trị đầu tiên có thể be hashedcompared for total equality có thể được chuyển đổi sang một HashMap. Tham số S không thú vị để nói về, nó chỉ định nghĩa phương thức băm là gì.

+0

Tốt, do đó, 'TừIterator' là của Rust' CanBuildFrom' :) (Tôi biết nó không phải nhưng nó chắc chắn dễ hiểu hơn ...) –

Các vấn đề liên quan