如何将值直接读取到全局 HashMap 中?

问题描述 投票:0回答:1

如何创建一个 HashMap 全局变量并直接填充数据?下面的代码有一个按预期工作的局部变量“e”。但是,我正在努力使其成为全局变量。

use std::collections::HashMap;

const E: HashMap<&str, &str> = HashMap::from([("Ar", "Argon"),
    ("Ce", "Cerium"), ("Br", "Bromine")] );


fn main() {
    let e = HashMap::from([("Ar", "Argon"),
    ("Ce", "Cerium"), ("Br", "Bromine")] );
    
    println!("{:?}", e["Ce"]);
    println!("{:?}", E["Ce"]);
}

我收到“错误:无法在常量中调用非常量 fn

create_some
”。您能提供一种快速简便的方法来完成这项工作吗?

rust hashmap global-variables
1个回答
0
投票

您无法在编译时执行此操作,因为哈希函数使用运行时生成的随机输入来防止某些类型的攻击或性能错误

这里的修复方法是使用类似

LazyLock
的东西,它将初始化推迟到第一次访问。

use std::{collections::HashMap, sync::LazyLock};

static E: LazyLock<HashMap<&str, &str>> =
    LazyLock::new(|| HashMap::from([("Ar", "Argon"), ("Ce", "Cerium"), ("Br", "Bromine")]));

fn main() {
    let e = HashMap::from([("Ar", "Argon"), ("Ce", "Cerium"), ("Br", "Bromine")]);

    println!("{:?}", e["Ce"]);
    println!("{:?}", E["Ce"]);
}

(游乐场)

© www.soinside.com 2019 - 2024. All rights reserved.