#indices #version-control #structure #index #immutability #order

fixed-index-vec

一种类似于向量的数据结构,当元素被移除时索引不会改变

1 个不稳定版本

0.1.0 2023年12月11日

#1829数据结构

自定义许可

15KB
123

固定索引向量 - Rust包

GitHub Workflow Status

本包提供了 FixedIndexVec,这是一个Rust集合,具有类似于数组的不可变索引功能。每个值在插入时都与一个唯一的索引相关联。可以通过索引访问、插入和删除值。项目不能被修改,也不能在删除后用另一个项目替换。

默认特性下,FixedIndexVec没有除Rust标准库之外的依赖项。

动机

我在寻找一种在数据结构内进行简单版本控制的方法。在FixedIndexVec中的索引不可变性允许简单地实现此功能。项目插入顺序通过比较其索引得以保持,删除项目则通过在访问时返回None的索引来反映。

要访问项目的“当前”版本,只需调用FixedIndexVec::last()

FixedIndexVec还有其他用例,但这是我创建它的动机。

安装

将以下内容添加到您的Cargo.toml

[dependencies]
fixed_index_vec = "0.1.0"

然后将其包含在您的应用程序中

use fixed_index_vec::FixedIndexVec;

使用功能

  • 使用FixedIndexVec::new()创建一个新的FixedIndexVec
  • 使用FixedIndexVec::push(value)FixedIndexVec的末尾插入一个新元素
  • 使用FixedIndexVec::remove(index)在指定索引处删除一个元素。如果该索引处不存在元素,则返回None
  • 返回给定索引处的元素引用,使用FixedIndexVec::get(index)。如果该索引处不存在元素,则返回None
  • 使用FixedIndexVec::iter()遍历所有元素,按其索引的升序排序。跳过没有对应值的索引。
  • 使用FixedIndexVec::len()返回FixedIndexVec中的元素数量
  • 使用FixedIndexVec::is_empty()检查FixedIndexVec是否不包含任何元素
  • 使用FixedIndexVec::clear()FixedIndexVec清除所有值
  • 使用FixedIndexVec::reset()清除FixedIndexVec中的所有值并将下一个索引重置为0

特性

  • serde:使用Serde启用FixedIndexVec的序列化和反序列化。要求FixedIndexVec包含实现SerializeDeserializeOwned的值。

示例

use fixed_index_vec::FixedIndexVec;
let mut vec = FixedIndexVec::new();
vec.push("value1".to_string()); vec.push("value2".to_string());
assert_eq!(vec.get(0), Some(&"value1".to_string())); assert_eq!(vec.get(1), Some(&"value2".to_string()));
vec.remove(1);
assert_eq!(vec.get(1), None);

贡献

欢迎提交拉取请求。对于重大更改,请先打开一个问题以讨论您想进行更改的内容。

许可证

本项目采用MIT许可证。

依赖关系

~175KB