Python列表理解非常简单:

>>> l = [x for x in range(1, 10) if x % 2 == 0]
>>> [2, 4, 6, 8] 

Rust是否有类似的语法:

let vector = vec![x for x in (1..10) if x % 2 == 0]
// [2, 4, 6, 8]

推荐答案

您可以只使用迭代器:

fn main() {
    let v1 = (0u32..9).filter(|x| x % 2 == 0).map(|x| x.pow(2)).collect::<Vec<_>>();
    let v2 = (1..10).filter(|x| x % 2 == 0).collect::<Vec<u32>>();

    println!("{:?}", v1); // [0, 4, 16, 36, 64]
    println!("{:?}", v2); // [2, 4, 6, 8]
}

Rust相关问答推荐

如何从使用mockall模拟的方法中返回self?

有没有办法模仿对象安全克隆?

文档示例需要导入相关的 struct ,但仅在运行测试时.这是故意的行为吗?

有没有更好的方法从HashMap的条目初始化 struct ?

如何使用 list 在Rust for Windows中编译?

MPSC频道在接收器处阻塞

为什么铁 rust S似乎有内在的易变性?

有没有可能让泛型Rust T总是堆分配的?

在Rust中声明和定义一个 struct 体有什么区别

Rust函数的返回值不能引用局部变量或临时变量

如果变量本身不是None,如何返回;如果没有,则返回None&Quot;?

如何初始化选项<;T>;数组Rust 了?

为什么 vec![Vec::with_capacity(n)] 为子向量创建 0 容量?

这是什么:`impl Trait for T {}`?

为什么 for_each 在释放模式(cargo run -r)下比 for 循环快得多?

为什么我可以同时传递可变和不可变引用?

我可以在不调用 .clone() 的情况下在类型转换期间重用 struct 字段吗?

需要括号的宏调用中的不必要的括号警告 - 这是编写宏的糟糕方法吗?

当引用不再被borrow 时,Rust 不会得到它

返回 &str 但不是 String 时,borrow 时间比预期长