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 在 压缩
每月74次下载
在 3 个 包中(直接使用 2 个)
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)
许可方式为
- Apache 许可证 2.0 版,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
(README 和源代码中的注释的英文由 DeepL 翻译。)
依赖项
~1.5MB
~26K SLoC