如何连接多个 Vec<Vec<f64>> 以生成另一个 Vec<Vec<f64>>?



有没有一种简单而优化的方法可以将ab组合得到c?我正在努力解决这个问题,因为我不能为c使用索引,因为它没有初始化。我试图避免使用2个零向量初始化c

let mut a: Vec<Vec<f64>> = Vec::with_capacity(2);
a.push(vec![1., 2., 3.]);
a.push(vec![4., 5., 6.]);
let mut b: Vec<Vec<f64>> = Vec::with_capacity(2);
b.push(vec![7., 8., 9.]);
b.push(vec![10., 11., 12.]);
let mut c: Vec<Vec<f64>> = Vec::with_capacity(2);
// expected result:
// c: Vec<Vec<f64>> = [[1., 2., 3., 7., 8., 9.], [4., 5., 6., 10., 11., 12.] ]

有很多方法可以做到这一点。一种是压缩外部向量,然后连接内部向量:

let a: Vec<Vec<f64>> = vec![vec![1., 2., 3.], vec![4., 5., 6.]];
let b: Vec<Vec<f64>> = vec![vec![7., 8., 9.], vec![10., 11., 12.]];
let c: Vec<Vec<f64>> = a
.into_iter()
.zip(b)
.map(|(mut a, b)| {
a.extend(b);
a
})
.collect();
assert_eq!(c, [[1., 2., 3., 7., 8., 9.], [4., 5., 6., 10., 11., 12.]]);

另请参阅:

  • 在Rust中连接向量的最佳方式

最新更新