簡體   English   中英

切片數組的切片 arrays

[英]Slice of an array of slices of arrays

我有一個二維數組,我想要一個 function 來改變它。 我還不知道矢量,但由於數組將具有固定大小,所以我不需要它們。 我想給 function 一個 arrays 切片數組的切片,例如fn my_func (arr: &mut [&mut [char]]) {...} ,但我不知道如何從我的 int main 中調用它.

這是我一直在玩的一個例子。

fn main() {
    let mut map = [['-'; 3]; 3];

    for row in map {
        for col in row {
            print!("{} ", col);
        }

        println!("");
    }

    println!("Changing...");
    put_plus(???);

    for row in map {
        for col in row {
            print!("{} ", col);
        }

        println!("");
    }
}

fn put_plus(map: &mut [&mut [char]]) {
    map[map.len() - 1][map[map.len() - 1].len() - 2] = '+';
}

我期望的 output 是:

- - - 
- - - 
- - - 
Changing...
- - -
- - -
- + -

是否有一個表達式可以將[[char; 3]; 3] [[char; 3]; 3] [[char; 3]; 3][[char]]這樣我就可以用這個表達式代替??? 一切正常??

這是適用於所有尺寸的 plus function 版本:

fn put_plus<const COUNT: usize>(map: &mut [[char; COUNT]; COUNT]) {
    map[map.len() - 1][map[map.len() - 1].len() - 2] = '+';
}

正如評論中所指出的,您只需要對“外部”結構進行可變引用。 在 Rust 中,您不在“元素”級別控制可變性。 相反,容器的可變性擴展到該容器內的所有元素。 例如,您不能擁有包含不可變向量的可變向量或包含不可變 arrays 的可變數組。

因此,只需將&mut拍到數組的“外部”就意味着數組中的所有內容,包括內部 arrays 和包含在這些內部 arrays 中的值,都將是可變的。

編輯:我的put_plus版本僅適用於方形 arrays。正如評論者@cafce25 指出的那樣,可以刪除外部:COUNT 這將使它更通用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM