在Rust中,如果要让一个array或Vec<>,逆序一下,很自然就会想到rev().
一、rev() :真身不见了
官方文档:
fn rev(self) -> Rev<Self>
需要说明的是,
进去的是array或Vec<>, 出来的是Rev了。类型变了!!
比如:
let a = [1, 2, 3];
let mut iter = a.iter().rev();
assert_eq!(iter.next(), Some(&3));
assert_eq!(iter.next(), Some(&2));
assert_eq!(iter.next(), Some(&1));
assert_eq!(iter.next(), None);
今天主要想探讨一下,array、Vec<>经过rev()之后,如何变回来?
二、如何返回真身?
1、array :
let s = [1_i32, 2, 3];
let snew: Vec<i32> = s.into_iter().rev().map(|&x|x).collect();//转成vec![]
或
let s = ["1", "2", "3"];
let snew: Vec<&str> = s.into_iter().rev().map(|&x| x).collect();
如何直接转成[]?
2、Vec<>:
let s = vec![1_i32, 2, 3];
let snew: Vec<i32> = s.into_iter().rev().collect();
println!("s :{:?}", snew); //vec![3,2,1],注意s已经不存在了!