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

如何以Rust惯用简洁方式查找集合中的特定枚举变体?

解决方案

你可以直接利用Rust的模式匹配结合迭代器的find()方法实现需求,完全不需要为A或B派生Eq/PartialEq特性,只判断枚举变体类型即可:

完整代码示例

struct A { x: i64 }
struct B { x: f64 }

enum E {
    One(A),
    Two(B),
    // 可添加其他变体
}

fn main() {
    let v = vec![
        E::One(A { x: 10 }),
        E::Two(B { x: 5.0 }),
        E::One(A { x: 20 }),
    ];

    // 查找第一个E::Two变体的元素
    let found = v.iter().find(|&&item| matches!(item, E::Two(_)));

    // 处理查找结果
    match found {
        Some(E::Two(b)) => println!("找到E::Two变体,内部x值为: {}", b.x),
        Some(_) => unreachable!("find只会返回E::Two变体"),
        None => println!("未找到E::Two变体"),
    }
}

关键说明

  1. matches!宏的作用:闭包里用matches!(item, E::Two(_))判断元素是否为E::Two变体,_表示忽略内部的B结构体数据,完全贴合你“只关心变体类型”的需求。
  2. 无额外trait依赖:整个实现不需要为A、B实现任何比较特性,避免过度设计和潜在问题。
  3. Rust惯用风格:用iter()获取不可变迭代器,find()返回第一个匹配元素的引用(Option<&E>),完全遵循迭代器的惯用写法。

如果需要获取可变引用,只需把iter()替换为iter_mut(),对应返回值为Option<&mut E>。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:42:46