首页 > 解决方案 > 在 Rust 中创建具有默认值的 `SecondaryMap`

问题描述

给定 a SlotMap,可以创建一个SecondaryMap将每个键从 映射SlotMap到默认值的 a 吗?

我们可以像这样创建一个函数:

fn create_secondary_map<K, I, V>(slotmap: SlotMap<K, I>, val: V) -> SecondaryMap<K, V> {
    let map = SecondaryMap::new();
    for key in slotmap.keys() {
        map.insert(key, val);
    }
    map
}

但我更愿意使用更“原生”的方式进行转换,也许使用已经存在的方法。我没有找到任何可以创建另一个SecondaryMap已经被填充的东西,有人知道这样的事情吗?

我想像这样使用它:

let secondary = slotmap.create_secondary(def_value);

哪里可能def_value会关闭。

标签: rust

解决方案


当标准迭代器机制可用且更可组合时,不需要专用方法。尝试这样的事情:

use slotmap::{Key, SecondaryMap, SlotMap};

fn create_secondary_map<K, I, V>(slotmap: &SlotMap<K, I>, val: V) -> SecondaryMap<K, V>
where
    K: Key,
    V: Clone,
{
    slotmap.keys().map(|key| (key, val.clone())).collect()
}

推荐阅读