Rust:使用迭代在集合中查找特定的枚举变体

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

很抱歉这个问题很长,但我不确定如何在提供 MWE 的同时缩短它。

设置

我有一个枚举,其变体具有结构参数,以及枚举的向量:

struct A { x: i64, };
struct B { x: f64, },
enum E {
   One(A),
   Two(B),
   // maybe others
};
fn main() {
   let v = vec![ One( A { x: 10 } ), Two( B { x : 5. } ), /* others as well */ ];
   // ...
}

任务

v
中查找
E::Two
.

类型的元素

问题

什么是简明的、Rust 惯用的方法来做到这一点?

首选方法

使用可迭代的

find()
方法,无需在
Eq
PartialEq
上推导或实现
A
B
,因为我想找到相同枚举变体的东西;我真的不关心变体的内容。此外,导出
Eq
PartialEq
是矫枉过正,并且会变得痛苦。

rust collections enums iterable
1个回答
0
投票

这两种可能性都没有使用首选方法。

循环,但不可迭代
find

我在网上的某个地方找到了这个(甚至可能是这样)

let mut index = 0;
let thing = loop {
    if let E::Two ( b ) = v[index] {
        break Some(b);
    }
    index += 1;
};

可迭代
find
,但需要推导

为类型

Eq
PartialEq
A
实现或派生
B
E
。现在就这么简单

let Some(thing) = v.iter().find(|element| if let E::Two(b) = element {true} else {false})
    else {
        panic!("failure! :-("); // I know this won't happen
    };
© www.soinside.com 2019 - 2024. All rights reserved.