Simple Grid
I noticed I kept reimplementing the same 2d-grid structure in many of my personal projects, so I decided to make it into a library. This data structure does not attempt to be the fastest or best implementation of a 2d-grid, but it's simple to use and has zero dependencies.
Example usage
Creating a grid and accessing its cells:
use Grid;
let grid = new;
assert_eq!;
println!;
// prints:
// 1 2 3 4 5 6 7 8 9 10
// 11 12 13 14 15 16 17 18 19 20
// 21 22 23 24 25 26 27 28 29 30
// 31 32 33 34 35 36 37 38 39 40
// 41 42 43 44 45 46 47 48 49 50
// 51 52 53 54 55 56 57 58 59 60
// 61 62 63 64 65 66 67 68 69 70
// 71 72 73 74 75 76 77 78 79 80
// 81 82 83 84 85 86 87 88 89 90
// 91 92 93 94 95 96 97 98 99 100
Iterating over cells:
let grid = new;
let elements_in_row_3: = grid.row_iter.copied.collect;
assert_eq!;
let elements_in_column_7: = grid.column_iter.copied.collect;
assert_eq!;
Modifying contents
let mut grid = new;
// get a mutable reference to a cell
*grid.get_mut.unwrap = 1000;
assert_eq!;
// can also access directly via the index operator
grid = 1001;
assert_eq!;
Serializing/deserializing
This is only available if the serde
feature is enabled.
Linear algebra
The linalg
feature includes some methods that are useful for linear algebra:
Arithmetic operations:
let grid1 = new;
let grid2 = new;
let sum = grid1 + grid2;
assert_eq!;
Inverse, transpose etc.:
let grid = new;
let inverse = grid.inverse.unwrap;
for in inverse
.cell_iter
.zip
Gaussian elimination
To solve the following system:
2x + y - z = 8
-3x - y + 2z = -11
-2x + y + 2z = -3
// the equation system represented as a Grid where the rightmost column is the right side of the equal signs
let mut grid = new;
let solution = grid.gaussian_elimination;
assert_eq! )
Giving the solution
x = 2, y = 3, z = -1