19个版本 (破坏性)
0.14.0 | 2024年5月15日 |
---|---|
0.13.0 | 2023年12月18日 |
0.12.0 | 2023年11月22日 |
0.10.0 | 2023年5月1日 |
0.1.1 | 2017年12月23日 |
#91 in 数据结构
97,034 每月下载量
用于 271 个crate(11直接)
115KB
2.5K SLoC
Grid
为Rust提供的数据结构网格。提供易于使用且快速的二维数据结构。此crate实现了大多数由std::vec::Vec类型为单维向量提供的功能,用于二维。
要使用grid与no_std导入库,例如
grid = { version = "*", default-features = false }
lib.rs
:
二维网格
连续可增长的二维数据结构。此crate的目的是提供一个比原始的Vec<Vec<T>>
解决方案更快、更节省内存、更易于使用的通用数据结构。
此crate将始终提供二维数据结构。如果您需要三个或更多维度,请查看ndarray库。《code>grid crate是一个各种数据的容器。如果您需要执行矩阵运算,您最好使用线性代数库,例如cgmath或nalgebra。除了std库外,不使用其他依赖项。大多数std::Vec<T>
提供的功能也已在grid
中实现,并略微修改以适应二维数据对象。
内存布局
类似于 C-like 数组,grid
使用扁平的 1D Vec<T>
数据结构,以实现连续的内存数据布局。请参阅此解释,了解为什么你可能需要使用一维数组方法。
请注意,此 crate 默认使用行主序的内存布局。
如果您需要特定的内存布局,请使用 *_with_order
构造函数。还应注意的是,某些转换方法会改变内部内存布局,例如 transpose
。
这个选择很重要,因为行主序内存布局下对行的操作更快。同样,列主序内存布局下对列的操作更快。
示例
use grid::*;
let mut grid = grid![[1,2,3]
[4,5,6]];
assert_eq!(grid, Grid::from_vec(vec![1,2,3,4,5,6],3));
assert_eq!(grid.get(0, 2), Some(&3));
assert_eq!(grid[(1, 1)], 5);
assert_eq!(grid.size(), (2, 3));
grid.push_row(vec![7,8,9]);
assert_eq!(grid, grid![[1,2,3][4,5,6][7,8,9]])
依赖项
~170KB