我的最终目标是改组矩阵的行(我正在使用nalgebra)。
为了解决这个问题,我需要设置一个数组的可变范围(切片)。 假设我有一个这样的数组(假设它是一个3x3矩阵):
let mut scores = [7, 8, 9, 10, 11, 12, 13, 14, 15];
我提取了这样一行:
let r = &scores[..].chunks(3).collect::<Vec<_>>()[1];
现在,对于knuth shuffle,我需要将它与另一行交换。我需要做的是:
scores.chunks_mut(3)[0] = r;
但是这样就失败了:
cannot index a value of type `core::slice::ChunksMut<'_, _>`
答案 0 :(得分:0)
我最终做了一个循环并逐个元素交换,这对我来说似乎更清晰:
fn swap_row<T>(matrix: &mut [T], row_src: usize, row_dest: usize, cols: usize){
for c in 0..cols {
matrix.swap(cols * row_src + c, cols * row_dest + c);
}
}