我可以使用vec![1,2,3]
来构建矢量
我可以在Rust中构建一个像这样的哈希映射:
hashmap![("key", "value")]
没有创建单独的变量并且每次都调用.insert()
?
答案 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(),做 一堆变换,然后在最后收集()。