You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中是否存在类似vec![]的宏可直接创建HashSet?

如何在Rust中快速创建HashSet?

Rust标准库没有内置类似vec![]的宏直接创建HashSet,但有几种更简洁的替代方案,无需手动显式创建中间数组:

1. 用迭代器收集创建

借助数组的迭代器,配合collect()方法可以直接生成HashSet,写法紧凑:

use std::collections::HashSet;

let viking_names: HashSet<_> = ["Einar", "Olaf", "Harald"].into_iter().collect();

这种方式和HashSet::from本质逻辑一致,但写法上更贴近直接创建的感觉,而且Rust编译器会自动优化掉中间数组的不必要分配,不会有冗余性能开销。

2. 自定义宏实现类似vec![]的效果

如果频繁需要这类写法,可以自己实现一个功能对标vec![]的宏:

use std::collections::HashSet;

macro_rules! hashset {
    ($($elem:expr),+ $(,)?) => {{
        let mut set = HashSet::new();
        $(set.insert($elem);)+
        set
    }}
}

// 使用示例
let viking_names = hashset!["Einar", "Olaf", "Harald"];

这个宏支持末尾可选的逗号,行为和vec![]完全一致,直接插入元素生成HashSet,没有中间数组步骤。

3. 借助第三方库

像hashbrown(标准库HashSet的底层实现库)、itertools这类第三方库,也提供了快速创建HashSet的工具,但如果只是简单场景,自定义宏或迭代器收集的方式已经足够轻量。

内容的提问来源于stack exchange,提问作者Yuchen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 16:25:22