我是生锈的新手,并且正在玩。当我学习一些教程时,我发现了一个类型为[[f64,1]>的向量。我认为将其转换为[f64]应该很简单,但是除了for循环外找不到其他简单的方法。还有其他方法吗?
let y: Vec<[f64;1]> = [[1],[2],[3],[4]];
let mut y2: Vec<f64> = Vec::new();
for each in &y {
y2.push(each[0]);
}
y
在您的示例中,不是Vec;您可能忘记vec!
了前面。此外,花车应该是1.0
没有1
。
我不知道为什么您发现这个for循环并不简单,但是如果您需要其他方式:
let y: Vec<[f64; 1]> = vec![[1.0], [2.0], [3.0], [4.0]];
let y2: Vec<f64> = y.iter().map(|&[f]| f).collect();
由于[f64; 1]
和f64
是相等的大小(均为8个字节),因此我们可以Vec
直接转换:
let y: Vec<[f64; 1]> = vec![[1.0], [2.0], [3.0], [4.0]];
let y2 = unsafe {
// Ensure the original vector is not dropped.
let mut y = std::mem::ManuallyDrop::new(y);
Vec::from_raw_parts(y.as_mut_ptr() as *mut f64,
y.len(),
y.capacity())
};
这更加复杂,但是它将重复使用相同的内存而不进行复制。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句