在 Rust 中,如果你需要过滤一个存储自定义结构的向量(Vector),你可以使用迭代器(Iterator)提供的 filter
方法来实现。这个方法允许你设置一个过滤条件,仅返回满足这个条件的元素。下面我将通过一个具体的例子来演示这个过程。
假设我们有一个结构体 Person
,其中包含人的名字和年龄。我们的目标是从一个包含多个 Person
实例的向量中过滤出所有年龄超过一定阈值的人。
首先,我们定义 Person
结构体和创建一个包含多个 Person
实例的向量:
ruststruct 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
方法:
rustfn 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 回复