如何将两个范围连接成 Vec

En *_*Xie 0 rust

如何制作Vec包含[0,1,2,3,4,3,2,1,0]使用范围?我试过这个:

let mut a = vec![0..len];
let  b = vec![len..=0];
a.extend(&b);
Run Code Online (Sandbox Code Playgroud)

但它会引发一个错误:

let mut a = vec![0..len];
let  b = vec![len..=0];
a.extend(&b);
Run Code Online (Sandbox Code Playgroud)

Joh*_*ica 5

据我所知,没有直接的语法可以Vec直接从范围创建。范围是一流的对象并实现Iterator,因此您可以将collect范围转换为Vec

范围也必须是从低到高。要获得反向范围,请创建常规正向范围并调用rev以创建反向迭代的迭代器。

let mut a = (0..len).collect::<Vec<_>>();
let b = (0..=len).rev();
a.extend(&b);
Run Code Online (Sandbox Code Playgroud)

您会注意到这collect需要::<>所谓的涡轮鱼操作员。这是因为它是一个泛型方法,可以将迭代器转换为任何实现FromIterator. 有许多实现的集合类型FromIterator,因此我们必须告诉它我们想要一个Vec特定的。

声明a的类型也有效:

let mut a: Vec<_> = (0..len).collect();
let b = (0..=len).rev();
a.extend(&b);
Run Code Online (Sandbox Code Playgroud)

还可以通过将两个迭代器链接在一起然后收集结果来构造向量。这种方式a不需要mut

let a = (0..len).chain((0..=len).rev())
    .collect::<Vec<_>>();
Run Code Online (Sandbox Code Playgroud)