Rust與Java程式碼比較:將二維陣列轉為三維陣列
在我們繼續 Rust 之前,這是我可以用 Java 編寫的簡單程式碼(花不到五分鐘的時間)
import java.util.Arrays; public class Demo { public static void update2dArray(int[][] array) { for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[i].length; j++) { array[i][j] = 100; } } } public static void main(String[] args) { int[][] array = new int[10][10]; //by default, initial values = 0 System.out.println("Before change"); Arrays.stream(array).forEach(row -> Arrays.stream(row).forEach(item -> System.out.print(" " + item))); update2dArray(array); System.out.println("\nAfter change"); Arrays.stream(array).forEach(row -> Arrays.stream(row).forEach(item -> System.out.print(" " + item))); int[][] newArray = new int[20][20]; // size is 20x20 update2dArray(newArray); System.out.println("\nAfter change"); Arrays.stream(newArray).forEach(row -> Arrays.stream(row).forEach(item -> System.out.print(" " + item))); } } |
可以看到,在 Java 中,更新 2d 陣列(或 3d 陣列)自然很容易。你只需要建立一個函式,然後這個函式將一個二維陣列作為引數。然後迴圈遍歷陣列的所有元素並更改每個元素的值。最後,當您返回主函式時,您將擁有一個更新的陣列。
一個重要的注意事項是 update_2d 函式可以接收任何大小的二維陣列。
作為一個內心深處有 Java的 開發人員,我想我會在 Rust 中做同樣的事情,如下所示:
fn update_2d_array(arr: &mut [[u32; 10]; 10]) { for i in 0..arr.len() { for j in 0..arr[i].len() { arr[i][j] = 10; } } } fn main() { let mut array_2d = [[0;10]; 10]; println!("Before: {:?}", array_2d); update_2d_array(&mut array_2d); println!("After: {:?}", array_2d); } |
Rust 版本執行良好……但有一個問題,函式 update_2d_array 需要指定矩陣的寬度和高度……。
那麼如何在執行時更新二維動態大小陣列呢?
在谷歌上搜尋了很多之後,我花了 3 個小時才找到答案。我們必須使用AsMut Trait,並建立一個新的資料型別V:AsMut<[u32]。您只需要記住 V 作為矩陣每一行的可變引用。
use std::array; fn update_2d_array(array: &mut [[u32; 10]; 10]) { for i in 0..array.len() { for j in 0..array[i].len() { array[i][j] = 100; } } } //AsMut trait fn update_2d_array_with_asmut<V: AsMut<[u32]>>(array: &mut [V]) { for i in 0..array.len() { for j in 0..array[i].as_mut().len() { array[i].as_mut()[j] = 200; } } } fn main() { let mut array_2d = [[0; 10]; 10]; // 10 x 10; println!("Before {:?}", array_2d); update_2d_array(&mut array_2d); println!("After {:?}", array_2d); update_2d_array_with_asmut(&mut array_2d); println!("After AsMut {:?}", array_2d); let mut array_2d_30 = [[0; 30]; 30]; update_2d_array_with_asmut(&mut array_2d_30); println!("After AsMut 30: {:?}", array_2d_30); } |
透過這樣做,我只是想展示一個例子,學習 Rust 不像 Python 或 Java 等其他語言那樣容易……要操作 2d/3d 陣列,我們可以使用第三方 crate……
相關文章
- Java 二維陣列轉一維Java陣列
- js 一維陣列轉二維陣列JS陣列
- js 二維陣列轉一維陣列JS陣列
- JavaSE 陣列:一維陣列&二維陣列Java陣列
- PHP中二維陣列與多維陣列PHP陣列
- Java二維陣列Java陣列
- 二維陣列和稀疏陣列互轉陣列
- 二維陣列程式碼案例分析陣列
- 指標陣列和陣列指標與二維陣列指標陣列
- 二維陣列陣列
- JAVA基礎--二維陣列Java陣列
- Java實現普通二維陣列和稀疏陣列的相互轉換Java陣列
- 如何將一維陣列轉換成與考慮南天陣列元素?陣列
- 二維陣列與指標陣列指標
- 多維陣列轉一維陣列(降維的多種方式)陣列
- Java 學習筆記 二維陣列和物件陣列Java筆記陣列物件
- 二維陣列排序陣列排序
- vector 二維陣列陣列
- C/C++ 二維陣列的理解(多維陣列)C++陣列
- Java break、continue 詳解與陣列深入解析:單維陣列和多維陣列詳細教程Java陣列
- scala陣列與java陣列對比陣列Java
- 二維陣列JSON.stringify 後,第二層陣列解析為空陣列JSON
- php 二維陣列排序PHP陣列排序
- 二維陣列查詢陣列
- 二維樹狀陣列陣列
- 二維陣列行排序陣列排序
- 二維陣列練習陣列
- C語言 二維陣列課題程式碼C語言陣列
- JavaScript 學習筆記 - 多維陣列變為一維陣列JavaScript筆記陣列
- 求二維陣列中最大子陣列的和陣列
- 7-蛇形二維陣列陣列
- 二維陣列的獲取陣列
- Kotlin建立二維Int陣列Kotlin陣列
- 簡單介紹Lua一維陣列與多維陣列的使用陣列
- 一維多維陣列陣列
- 一維陣列陣列
- 多維陣列陣列
- Java陣列宣告建立和使用以及多維陣列、Arrays類、稀疏陣列Java陣列