乐闻世界logo
搜索文章和话题

Rust 如何过滤自定义结构的矢量?

4 个月前提问
3 个月前修改
浏览次数20

1个答案

1

在 Rust 中,如果你需要过滤一个存储自定义结构的向量(Vector),你可以使用迭代器(Iterator)提供的 filter 方法来实现。这个方法允许你设置一个过滤条件,仅返回满足这个条件的元素。下面我将通过一个具体的例子来演示这个过程。

假设我们有一个结构体 Person,其中包含人的名字和年龄。我们的目标是从一个包含多个 Person 实例的向量中过滤出所有年龄超过一定阈值的人。

首先,我们定义 Person 结构体和创建一个包含多个 Person 实例的向量:

rust
struct Person { name: String, age: u32, } fn main() { let people = vec![ Person { name: "Alice".to_string(), age: 30 }, Person { name: "Bob".to_string(), age: 20 }, Person { name: "Carol".to_string(), age: 40 }, ]; }

现在,如果我们想要找出所有年龄大于 25 岁的人,我们可以使用 filter 方法:

rust
fn main() { let people = vec![ Person { name: "Alice".to_string(), age: 30 }, Person { name: "Bob".to_string(), age: 20 }, Person { name: "Carol".to_string(), age: 40 }, ]; let older_than_25 = people.iter() .filter(|p| p.age > 25) .collect::<Vec<&Person>>(); for person in older_than_25 { println!("Name: {}, Age: {}", person.name, person.age); } }

在这个例子中,我们首先调用了 iter() 方法来获取 people 向量的迭代器。然后,我们使用 filter 方法,并传递一个闭包,这个闭包接收一个 &Person 类型的参数 p,并返回一个布尔值,表示是否满足过滤条件(此处为 p.age > 25)。最后,我们使用 collect 方法将过滤后的迭代器转换回一个向量。

这种方法非常适用于需要对集合中的元素按特定条件进行筛选的情况,既高效又易于理解。

2024年7月1日 12:55 回复

你的答案