6个版本

0.3.2 2023年12月18日
0.3.1 2023年12月12日
0.3.0 2022年12月8日
0.2.1 2019年6月18日
0.1.0 2019年6月10日

#108 in 数据结构

Download history 556/week @ 2024-04-09 679/week @ 2024-04-16 757/week @ 2024-04-23 963/week @ 2024-04-30 612/week @ 2024-05-07 634/week @ 2024-05-14 802/week @ 2024-05-21 668/week @ 2024-05-28 536/week @ 2024-06-04 455/week @ 2024-06-11 668/week @ 2024-06-18 666/week @ 2024-06-25 166/week @ 2024-07-02 431/week @ 2024-07-09 718/week @ 2024-07-16 595/week @ 2024-07-23

1,996 每月下载量
用于 15 包(直接使用10个)

MIT 许可证

55KB
358

array2d

Array2D提供固定大小的二维数组。它比向量向量更有效且更容易使用,即 Vec<Vec<T>>

当使用类似网格的结构时,这很有用,这在图像处理、游戏棋盘和其他情况下很常见。当行或列可能有不同长度时,不能使用Array2D——所有行和列必须具有相同的长度。

如何使用 Array2D

创建 Array2D

创建 Array2D 有多种方法。这些包括

访问 Array2D 中的数据

Array2D 支持多种索引形式

Array2D 还支持多种迭代形式。您可以遍历

Array2D中提取所有数据

通过几种方法可以将一个Array2D转换回一个Vec。您可以将数据提取为

示例

use array2d::{Array2D, Error};

pub fn main() -> Result<(), Error> {
    // Create an array filled with the same element.
    let prefilled = Array2D::filled_with(42, 2, 3);
    assert_eq!(prefilled.num_rows(), 2);
    assert_eq!(prefilled.num_columns(), 3);
    assert_eq!(prefilled[(0, 0)], 42);

    // Create an array from the given rows. You can also use columns
    // with the `columns` function
    let rows = vec![vec![1, 2, 3], vec![4, 5, 6]];
    let from_rows = Array2D::from_rows(&rows)?;
    assert_eq!(from_rows.num_rows(), 2);
    assert_eq!(from_rows.num_columns(), 3);
    assert_eq!(from_rows[(1, 1)], 5);

    // Create an array from a flat Vec of elements in row major or
    // column major order.
    let column_major = vec![1, 4, 2, 5, 3, 6];
    let from_column_major =
        Array2D::from_column_major(&column_major, 2, 3)?;
    assert_eq!(from_column_major.num_rows(), 2);
    assert_eq!(from_column_major.num_columns(), 3);
    assert_eq!(from_column_major[(1, 1)], 5);

    // Implements `Eq` if the element type does.
    assert_eq!(from_rows, from_column_major);

    // Index into an array using a tuple of usize to access or alter
    // the array.
    let rows = vec![vec![1, 2, 3], vec![4, 5, 6]];
    let mut array = Array2D::from_rows(&rows)?;
    array[(1, 1)] = 100;

    // Convert the array back into a nested Vec using `as_rows` or
    // `as_columns`.
    let array_rows = array.as_rows();
    assert_eq!(array_rows, vec![vec![1, 2, 3], vec![4, 100, 6]]);

    // Convert the array back into a flat Vec using `as_row_major` or
    // `as_column_major`.
    let array_column_major = array.as_column_major();
    assert_eq!(array_column_major, vec![1, 4, 2, 100, 3, 6]);

    // Iterate over a single row or column
    println!("First column:");
    for element in array.column_iter(0)? {
        println!("{}", element);
    }

    // Iterate over all rows or columns.
    println!("All elements:");
    for row_iter in array.rows_iter() {
        for element in row_iter {
            print!("{} ", element);
        }
        println!();
    }

    Ok(())
}

许可证:MIT

依赖项

~175KB