#array #fixed-length #array-index #vec #index

vec-x

提供结构体 VecX 来管理固定长度的数组,支持 VecX 与标量值之间的数值运算和赋值操作。

9 个版本 (破坏性更新)

0.8.0 2024年6月27日
0.7.0 2024年5月18日
0.6.0 2024年5月17日
0.5.0 2024年5月17日
0.1.1 2024年5月9日

#627压缩

Download history 217/week @ 2024-05-05 640/week @ 2024-05-12 152/week @ 2024-05-19 9/week @ 2024-05-26 94/week @ 2024-06-23 9/week @ 2024-06-30 16/week @ 2024-07-14 57/week @ 2024-07-28

每月74次下载
3 包中(直接使用 2 个)

MIT/Apache

34KB
415

vec-x-rs

提供结构体VecX来管理固定长度的数组,支持VecX与标量值之间的数值运算和赋值操作。

提供结构体 VecX 来管理固定长度的数组,支持 VecX 与标量值之间的数值运算和赋值操作。

还提供了其他便利的方法,如元素的批量转换。

还提供了其他有用的方法,例如元素的批量转换。

它还提供了一种管理具有索引的唯一数组的方法。

它还提供了一种管理具有索引的唯一数组的方法。

用法 (Usage)

use vec_x::{VecX, IndexedVecXs};

fn main() {

    // i32型の要素を3つ持つ配列を作成
    // Create an array with three elements of type i32
    let vec: VecX<i32, 3> = VecX::new([1, 2, 3]);
    let vec: VecX<i32, 3> = VecX::from([1, 2, 3]);
    let vec: VecX<i32, 3> = VecX::from([1; 3]);
    let vec: VecX<i32, 3> = VecX::from(1);


    // 型エイリアスを使用してインスタンスを作成
    // Create an instance using a type alias
    type XYZ = VecX<f64, 3>;
    type RGBA = VecX<u8, 4>;

    let point = XYZ::new([1., 2., 3.]);
    let red = RGBA::new([255, 0, 0, 255]);


    // 配列の要素にアクセス
    // Accessing elements of an array
    let vec = VecX::new([1, 2, 3]);

    assert_eq!(vec[0], 1);
    assert_eq!(vec[1], 2);
    assert_eq!(vec[2], 3);


    // 数値演算(+, -, *, /, %)
    // Numeric operations (+, -, *, /, %)
    let a = VecX::new([1, 2, 3]);
    let b = VecX::new([4, 5, 6]);

    assert_eq!(a + b, VecX::new([5, 7, 9]));

    // スカラーとの演算(+, -, *, /, %)
    // Operations with scalars (+, -, *, /, %)
    let a = VecX::new([1, 2, 3]);

    assert_eq!(a + 1, VecX::new([2, 3, 4]));


    // 代入演算(+, -, *, /, %)
    // Assignment operations (+, -, *, /, %)
    let mut a = VecX::new([1, 2, 3]);

    a += VecX::new([4, 5, 6]);

    assert_eq!(a, VecX::new([5, 7, 9]));

    // スカラーとの代入演算(+, -, *, /, %)
    // Assignment operations with scalars (+, -, *, /, %)
    let mut a = VecX::new([1, 2, 3]);

    a += 1;

    assert_eq!(a, VecX::new([2, 3, 4]));

    // 比較
    // Comparison
    let vec1 = VecX::new([1, 2, 3]);
    let vec2 = VecX::new([1, 2, 3]);
    assert_eq!(vec1, vec2);
    assert!(vec1 <= vec2);
    assert!(vec1 >= vec2);

    let vec1 = VecX::new([1, 2, 3]);
    let vec2 = VecX::new([4, 5, 6]);
    assert!(vec1 < vec2);

    let vec1 = VecX::new([1, 2, 3]);
    let vec2 = VecX::new([1, 2, 2]);
    assert_ne!(vec1, vec2);
    assert!(vec1 > vec2);

    // 要素のキャスト
    // Element casting
    let vec = VecX::new([1, 2, 3]);
    let vec_f64: VecX<f64, 3> = vec.as_();


    // インデックスでの管理
    // Management by index
    type RGB = VecX<u8, 3>;

    let unique_colors = vec![
        RGB::new([255, 0, 0]),
        RGB::new([0, 255, 0]),
        RGB::new([0, 0, 255]),
    ];

    let colors = vec![
        unique_colors[0], // VecX: [255, 0, 0]
        unique_colors[1], // VecX: [0, 255, 0]
        unique_colors[1], // VecX: [0, 255, 0]
        unique_colors[0], // VecX: [255, 0, 0]
        unique_colors[2], // VecX: [0, 0, 255]
        unique_colors[2], // VecX: [0, 0, 255]
    ];

    let indexed_colors = IndexedVecXs::from_vec(colors);

    let IndexedVecXs { values, indices } = indexed_colors;


    // 元データの一意な要素の出現順にインデックスされる
    // Indexed in the order of appearance of unique elements in the original data
    assert_eq!(values[0], unique_colors[0]);
    assert_eq!(values[1], unique_colors[1]);
    assert_eq!(values[2], unique_colors[2]);

    assert_eq!(indices, vec![0, 1, 1, 0, 2, 2]);
}

许可 (License)

许可方式为

任选其一。

(README 和源代码中的注释的英文由 DeepL 翻译。)

依赖项

~1.5MB
~26K SLoC