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
相关产品推荐
相关产品推荐

