如何在Vec或切片中设置范围?

时间:2015-09-10 19:37:44

标签: rust

我的最终目标是改组矩阵的行(我正在使用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<'_, _>`

示例:http://is.gd/ULkN6j

1 个答案:

答案 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);
      }
    }