在 Rust 中创建可变切片的可变切片的最有效方法是什么?

问题描述 投票:0回答:1

我使用外部库函数,它获取类型作为输入:

&mut [&mut [f32]]
,它应该表示具有固定维度的二维数组。

为了更好的性能,我想创建一个一维数组,这样所有的数据都会连续地保存在内存中,并将其转换为上面的形式。

但是,由于缺乏 Rust 经验,我有点挣扎,我想知道实现我的目标的“Rust 方式”是什么。

我能想到的一种方法是创建一个新的

Vec
,迭代一维arra,并将每个切片推送到它,但这感觉像是浪费内存。

提前致谢。

rust
1个回答
0
投票

你不能把一个

Vec<f32>
变成一个
&mut [&mut [f32]]
,但是你可以通过首先把它变成一个&mut [&mut [f32]],然后简单地将它包装在另一个
Vec<f32>中,从
&mut [f32]
廉价地
构造
一个
&mut []
.

fn main() {
    let mut v = vec![1.0, 2.0, 3.0];
    let inner = &mut *v;
    add(&mut [inner], 10.0);
    println!("{v:?}");
    // [11.0, 12.0, 13.0]
}

fn add(arr: &mut [&mut [f32]], addend: f32) {
    for outer in arr {
        for inner in outer.iter_mut() {
            *inner += addend;
        }
    } 
}
© www.soinside.com 2019 - 2024. All rights reserved.