7个不稳定版本 (3个破坏性更改)
0.4.2 | 2023年4月10日 |
---|---|
0.4.1 | 2023年4月4日 |
0.3.0 | 2023年4月4日 |
0.2.1 | 2023年4月3日 |
0.1.0 | 2023年3月27日 |
#1199 in 数据结构
每月下载 35 次
31KB
359 行
granular-id
此包提供了一个数据类型 GranularId<T>
,可以表示任意精度的ID号码。
功能
GranularId<T>
是一个类型为T
的组件序列,可以进行排序和比较。- 在任意两个
GranularId<T>
之间,存在无限多个更细粒度的ID。 GranularId<T>
最好与任何无大小整数类型一起使用,例如u8
、u16
、u32
等。GranularId<T>
还可以与实现适当num_traits
的任何类型一起使用。GranularId<T>
有方法可以访问其父级、子级、兄弟级以及树状结构中的其他关系。
示例用法
use granular_id::GranularId;
fn test() {
// Create a new GranularId from a vec of u8 (id: 1.2.3)
let id: GranularId<u8> = vec![1, 2, 3].into();
// Get the parent ID (id: 1.2)
let parent = id.parent().unwrap();
assert_eq!(parent, vec![1, 2].into());
// Iterate over the following siblings of 1.2.3
let mut next_siblings = id.next_siblings();
// First one is 1.2.4
assert_eq!(next_siblings.next().unwrap(), vec![1, 2, 4].into());
// Then, 1.2.5, etc
assert_eq!(next_siblings.next().unwrap(), vec![1, 2, 5].into());
assert_eq!(next_siblings.next().unwrap(), vec![1, 2, 6].into());
// Get an iterator over childrens of 1.2.3
let mut children = id.children();
// First one is 1.2.3.0
assert_eq!(children.next().unwrap(), vec![1, 2, 3, 0].into());
// Then, 1.2.3.1, etc
assert_eq!(children.next().unwrap(), vec![1, 2, 3, 1].into());
assert_eq!(children.next().unwrap(), vec![1, 2, 3, 2].into());
// Each parent is always smaller than all of its children
assert!(parent < id);
}
安装
将此添加到您的 Cargo.toml
[dependencies]
granular-id = "0.4.2"
许可证
本项目采用MIT许可证。有关详细信息,请参阅 LICENSE。
依赖关系
~150KB