#序列 #集合 #泛型 #集合操作

no-std kovdiak-sets

一个管理泛型集合的库,支持独特特性

2个不稳定版本

0.2.0 2023年8月20日
0.1.0 2023年6月17日

1287数据结构

每月下载量21

MIT/Apache

54KB
1K SLoC

kovdiak-sets

GitHub Top Language Static unsafe crates.io License GitHub License

GitHub Latest Release GitHub Commits

Code Coverage GitHub Build Status Static docs coverage docs.rs Libraries.io Dep Status

GitHub Security Schedule GitHub Security Push

GitHub Open Issues GitHub Closed Issues

crates.io Latest crates.io Recent

使用这些强大且易于使用的集合来整理事物。0.1.0版本中实现的第一组是 Sequence。从泛型角度来看,序列是有序元素集合,每个元素在唯一位置。 Sequence 允许在任何位置添加和删除元素,几乎无限。

最初,使用 Vec<T> 来实现序列似乎最为合适。然而,在考虑持久化序列时,实践中存在一些挑战

  • 如何在数据库中存储序列并高效检索它?
  • 如何高效地在序列的任意位置添加元素,例如,无需更改所有后续元素的位置?
  • 如何更改单个元素的位置,而无需更改其他元素的位置?
  • 如何避免需要重新平衡序列,即需要重写所有元素的位置?
  • 如何将方法扩展到对序列执行数十万次操作,例如添加、移动和删除元素?

kovdiak-setsSequence 的实现目标是为了解决这些挑战。在 0.1.0 版本中,它仅提供对 Sequence 的支持。将来可能会添加其他类型的集合。

我们使用“中位分数”算法来定义 Sequence 内部的位置。中位分数是一个已知的数学概念,长期以来一直被了解和使用。这是一种通过分别取分子和分母的和来找到介于两个给定分数之间分数的方法。

这个包是 Kodiak 项目的构建块,因此包的命名。Kodiak 支持大规模的实体序列。然而,kovdiak-sets 提供的功能本身很有用,也可能对其他项目感兴趣。这就是为什么我们将其作为单独的包提供。因此,请随意使用它。如果您考虑在您的项目中使用 kovdiak-sets 但缺少某些功能或有任何其他问题,请不要犹豫,在 GitHub 上提交问题。

我们期待您的反馈。


你可能正在寻找


感想

待办:展示两个由 kodiak-sets 支持的序列示例。

在 EXAMPLES.md 中提供更多示例,并链接到它。

展示功能!

已知问题/限制

  • 🏗️ 版本 0.2.0 还未为其他项目提供动力,因此 API 尚未在实践中证明其力量。
  • 🚧 代码已完全覆盖单元测试,但仍然缺少一些集成测试。
  • 文档仍有 一些 改进空间。
  • 🐧 版本 0.2.x 仅在 Linux 上开发和测试。

路线图和未来考虑

版本 0.4.0(计划中)

  • 展示如何使用此库与 MySQL 一起使用的示例。

版本 0.3.0(计划中)

  • 使用 std::collections::BTreeMap 重新实现。
  • 完整的文档 #![deny(missing_docs)]
  • 展示如何使用此库与 PostgreSQL 一起使用的示例。

版本 0.2.0(已交付)

  • Sequence 实现 IteratorIntoIterator
  • 支持 serde 的 #[derive(Serialize, Deserialize)]
  • 支持 Clone 特性。
  • 引入基准测试,并在 GitHub 上发布结果(参见基准测试)。

版本 0.1.0(已交付)

  • 初始发布。
  • 展示基于分数定位的强大功能的示例。
  • 展示如何使用此库与 SQLite 一起使用的示例。

其他资源

贡献

有关更多详细信息,请参阅 CONTRIBUTING

附录

Cargo Geiger 安全报告


Metric output format: x/y
    x = unsafe code used by the build
    y = total unsafe code found in the crate

Symbols: 
    🔒  = No `unsafe` usage found, declares #![forbid(unsafe_code)]= No `unsafe` usage found, missing #![forbid(unsafe_code)]
    ☢️  = `unsafe` usage found

Functions  Expressions  Impls  Traits  Methods  Dependency

0/0        0/0          0/0    0/0     0/0      🔒  kodiak-sets 0.2.0
0/0        0/0          0/0    0/0     0/0      ❓  ├── num-integer 0.1.45
0/0        0/0          0/0    0/0     0/0      ❓  │   └── num-traits 0.2.16
0/0        0/5          0/0    0/0     0/0      ❓  └── serde 1.0.183
0/0        0/0          0/0    0/0     0/0      ❓      └── serde_derive 1.0.183

0/0        0/5          0/0    0/0     0/0    

许可

根据您的选择,许可如下:

https://www.figma.com/blog/realtime-editing-of-ordered-sequences/

https://crates.io/crates/fractional_index

https://cs.stackexchange.com/questions/14708/maintaining-an-efficient-ordering-where-you-can-insert-elements-in-between-any

https://ccssmathanswers.com/inserting-a-fraction-between-two-given-fractions/

依赖项

~140–375KB