如何在Rust中定义一行内容为1行的散列图?

时间:2016-12-14 12:56:00

标签: rust

我可以使用vec![1,2,3]来构建矢量 我可以在Rust中构建一个像这样的哈希映射:

hashmap![("key", "value")]

没有创建单独的变量并且每次都调用.insert()

2 个答案:

答案 0 :(得分:5)

如果您创建一个宏

macro_rules! hashmap {
    ($( $key: expr => $val: expr ),*) => {{
         let mut map = ::std::collections::HashMap::new();
         $( map.insert($key, $val); )*
         map
    }}
}

然后你称之为

let map= hashmap!["key1" => "value1", "key2" => "value2"];

答案 1 :(得分:4)

一种解决方案是依靠数组并collect()将其放入HashMap

fn main() {
    let map: std::collections::HashMap<_, _> = [("foo", 0), ("bar", 1)]
        .iter()
        .cloned()
        .collect();

    println!("{:?}", map);
}

输出:

{"foo": 0, "bar": 1}

collect()来自Rust文档:

  

将迭代器转换为集合。

     

collect()可以采用任何可迭代的方式,并将其转换为相关的   采集。这是该标准中更强大的方法之一   库,用于各种环境。

     

使用collect()的最基本模式是转一个   收集到另一个。你拿一个集合,在它上面调用iter(),做   一堆变换,然后在最后收集()。