如何在Rust中定义一行内容为1行的hashmap?

Ser*_*gey 3 rust

我可以vec![1,2,3]用来构建一个矢量.
我可以在Rust中构建一个像这样的hashmap:

hashmap![("key", "value")]
Run Code Online (Sandbox Code Playgroud)

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

Szy*_*ski 5

如果您创建一个宏

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)


Lud*_*Lud 5

一种解决方案是依赖数组并将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()。

  • 最好不要使用向量,以避免不必要的内存分配。该数组适用于可克隆类型:`[("foo", 0), ("bar", 1)].iter().cloned().collect()` (2认同)