我可以vec![1,2,3]用来构建一个矢量.
我可以在Rust中构建一个像这样的hashmap:
hashmap![("key", "value")]
Run Code Online (Sandbox Code Playgroud)
没有创建单独的变量并且.insert()每次调用?
如果您创建一个宏
macro_rules! hashmap {
($( $key: expr => $val: expr ),*) => {{
let mut map = ::std::collections::HashMap::new();
$( map.insert($key, $val); )*
map
}}
}
Run Code Online (Sandbox Code Playgroud)
那么你就像跟随它一样
let map= hashmap!["key1" => "value1", "key2" => "value2"];
Run Code Online (Sandbox Code Playgroud)
一种解决方案是依赖数组并将collect()其放入HashMap:
fn main() {
let map: std::collections::HashMap<_, _> = [("foo", 0), ("bar", 1)]
.iter()
.cloned()
.collect();
println!("{:?}", map);
}
Run Code Online (Sandbox Code Playgroud)
它输出:
{"foo": 0, "bar": 1}
Run Code Online (Sandbox Code Playgroud)
collect() 从Rust文档中:
将迭代器转换为集合。
collect()可以接受任何可迭代的内容,并将其转换为相关的集合。这是在各种上下文中使用的标准库中功能更强大的方法之一。
使用collect()的最基本模式是将一个集合转换为另一个集合。您获取一个集合,对其进行调用iter(),进行一堆转换,然后最后进行collect()。