将Vec <[f64; 1]>转换为Vec <f64>

塞尔瓦

我是生锈的新手,并且正在玩。当我学习一些教程时,我发现了一个类型为[[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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何编写Serde Visitor将字符串数组转换为Vec <Vec <f64 >>?

如何将Vec <f64>安全地重新解释为一半大小的Vec <num_complex :: Complex <f64 >>?

为什么将f64转换为u64然后又转换为f64会产生不同的值?

如何将 std::ffi::OsString 转换为 f64 或 f32

将数字原语(i32,f64等)转换为字节表示形式

如何将&i32转换为f64?

为什么在Go中交换[] float64的元素比在Rust中交换Vec <f64>的元素快?

为什么.parse()将“ 42”转换为f64,但无法将“ 42.0”转换为i32?

Vec<f64> 的最小值/最大值/特徵 `Ord` 沒有為 xy 實現

从特性到特性以及usize到f64的转换

如何将 f64 数组重新解释为 f64 元素的元组?

如何将f64转换为f32并获得最接近的近似值和下一个更大或更小的值?

将Vec <u64>转换为Vec <(&str,u64)>以获得tui :: BarChart数据

将 Vec<u32> 转换为 Vec<u64>(或 Vec<std::os::raw::c_ulong>)

如何将数据从Array2 <f64>输入到kdtree?

如何将 f64 截断为 2 个小数位?

将大型 f64 二进制文件读入数组

f64的最大可能值?

在Rust中将usize转换为f64时,要知道精度损失的最佳方法是什么?

为类型别名元组 (f64, f64) 添加 Impl

为什么将一个枚举变量设为f64会增加该枚举的大小?

Opencv ::将Mat_ <Vec3f>转换为普通的8位彩色图像

如何使用Rust的BinaryHeap实现f64的最小堆?

Neo4rs BoltType Float f64

我如何证明f64 :: from_bits(0x3fe9000000000000 u64)== 0.781250 f64

为什么在64位Linux上Option <f64>的大小为16个字节?

在Rust中将f64舍入到最接近的i64

从C ++ std :: vector <float>转换为Rust Vec <f32>的最佳方法是什么?

如何返回盒装迭代器,该盒装迭代器返回f64的盒装迭代器?