Rust是否具有Python的列表推导语法?

Dar*_*ird 17 syntax iterable list-comprehension rust

Python列表理解非常简单:

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

Rust是否具有如下等效语法:

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

lje*_*drz 24

你可以使用迭代器:

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]
}
Run Code Online (Sandbox Code Playgroud)

  • @Darkaird没有.迭代器是惰性的,只处理每个元素一次. (8认同)
  • 你了解复杂性吗?应用过滤器然后映射是否会强制迭代两次,从而使计算时间加倍? (3认同)

Jac*_*all 21

cute是Python中的Python-esque列表和字典(HashMap)理解的宏.

#[macro_use(c)]
extern crate cute;

let vector = c![x, for x in 1..10, if x % 2 == 0];
Run Code Online (Sandbox Code Playgroud)

  • 我已经看过这个并发现它真的很有趣,但我想要的更多的是像 @ljedrz 回答的内置函数/语法。 (3认同)
  • @Darkaird铁锈有一个相当瘦的标准库,所以如果没有额外的板条箱,你可能不会走得太远. (3认同)