MST

星途 面试题库

面试题:Rust布尔类型在泛型和trait条件判断中的深度运用

定义一个泛型结构体`Container<T>`,其中`T`实现了`std::fmt::Debug` trait。再定义一个函数`filter_containers`,它接受一个`Vec<Container<T>>`类型的向量和一个闭包作为参数,闭包接受`&T`并返回一个布尔值。函数`filter_containers`需要根据闭包返回的布尔值,过滤掉不符合条件的`Container<T>`,并返回一个新的`Vec<Container<T>>`。请完整实现该功能,并在`main`函数中进行示例调用,使用`i32`类型作为`T`,闭包判断条件为传入的`i32`值大于5。
47.5万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
use std::fmt::Debug;

// 定义泛型结构体
struct Container<T>
where
    T: Debug,
{
    value: T,
}

// 定义过滤函数
fn filter_containers<T>(containers: Vec<Container<T>>, predicate: impl Fn(&T) -> bool) -> Vec<Container<T>>
where
    T: Debug,
{
    containers.into_iter().filter(|container| (predicate)(&container.value)).collect()
}

fn main() {
    let containers: Vec<Container<i32>> = vec![
        Container { value: 3 },
        Container { value: 7 },
        Container { value: 1 },
        Container { value: 9 },
    ];

    let filtered = filter_containers(containers, |&num| num > 5);

    for container in filtered {
        println!("{:?}", container);
    }
}