I use an external library function, that get as input the type:
&mut [&mut [f32]], which should represent a 2-d array with fixed dimensions.

为了获得更好的性能,我想创建一个一维数组,这样所有数据都将连续位于内存中,并将其转换为上述形式.

然而,由于缺乏Rust经验,我并没有什么挣扎,我想知道实现我目标的"Rust方式"是什么.

我能想到的一种方法是创建一个新的Vec,迭代1维arra,并将每个切片推到它,但感觉像是浪费内存.

提前感谢.

推荐答案

一旦您将数据保存在单个连续切片中(例如在Vec中),您就可以使用chunks_exact_mut来获得每个可变子切片上的迭代器,但您必须将其collect放入(另一个)Vec才能将结果切片传递到库. 例如:

/// Given the row-first two-dimensional array represented by
/// `contiguous_rows_of_cols`, return (in order) each row as a subslice.
fn to_vec_of_slices<T>(contiguous_rows_of_cols: &mut [T], cols: usize) -> Vec<&mut [T]> {
    contiguous_rows_of_cols.chunks_exact_mut(cols).collect()
}

See it on the playground.

Rust相关问答推荐

如何处理动态 struct 实例化?

如何go 除铁 rust 中路径组件的第一项和最后一项?

有没有办法避免在While循环中多次borrow `*分支`

在Rust中判断编译时是否无法访问

更合理的方法来设计样条线函数器?

Rust ndarray:如何从索引中 Select 数组的行

Rust proc_macro 和 syn:解析空格

为什么我必须使用 PhantomData?在这种情况下它在做什么?

Rust,如何从 Rc> 复制内部值并返回它?

`UnsafeCell` 在没有锁定的情况下跨线程共享 - 这可能会导致 UB,对吗?

Rust LinkedList 中的borrow 判断器错误的原因是什么?

如何在 Rust 中打印 let-else 语句中的错误?

可以在旋转循环中调用try_recv()吗?

try 从标准输入获取用户名和密码并删除 \r\n

需要一个有序向量来进行 struct 初始化

为什么带有生命周期指定的方法不能被调用两次?

如何从 x86_64 Mac 构建 M1 Mac?

试图理解 Rust 中的可变闭包

有没有更好的方法来为拥有 DIsplay 事物集合的 struct 实现 Display?

火箭整流罩、tokio-scheduler 和 cron 的生命周期问题