这是 Swift 中有限顺序集合的实现,基于 OrderedSet。
您可以使用此数据结构来限制集合中存储的非等项的数量。
LimitedOrderedSet 可通过 Swift Package Manager 安装。
.package(url: "https://github.com/MrAsterisco/LimitedOrderedSet", from: "<see GitHub releases>")
要了解最新版本,请查看此仓库的“Releases”标签。
LimitedOrderedSet
的工作方式与 OrderedSet
完全相同,只是增加了一个限制。
您可以从任何 Sequence
创建 LimitedOrderedSet
let set = LimitedOrderedSet(["A", "B", "C"], limit: 3)
您指定的 limit
用于确定 OrderedSet
的最大容量。 您可以添加或插入项目到集合中,直到达到指定的限制。
let set = LimitedOrderedSet(limit: 2)
set.append("A") // ✅ Added
set.append("B") // ✅ Added
set.isFull // <-- ✅ true
set.append("B") // ❌ Not Added
如果指定索引,您还可以控制集合在已满时尝试添加新项目的行为。
let set = LimitedOrderedSet(["A", "B"], limit: 2)
// 1️⃣ Drop Last Item
set.insert("C", at: 1, ifFull: .dropLast)
print(set) // <-- ["A", "C"]
// 2️⃣ Drop First Item
set.insert("C", at: 1, ifFull: .dropFirst)
print(set) // <-- ["B", "C"]
// 3️⃣ Reject
set.insert("C", at: 1, ifFull: .reject) // ❌ Not Added
print(set) // <-- ["A", "B"], unchanged
该类的定义已记录,但大多数方法尚未记录(但尚未完成)。 文档将在未来的版本中得到改进。
LimitedOrderedSet 与所有 Apple 平台兼容。
LimitedOrderedSet 依赖于
swift-collections/OrderedSet
版本 1。欢迎所有扩展库的贡献。 Fork 该仓库,进行您想要的更改,然后打开一个 Pull Request。
如果您对代码库进行了更改,我不会强制执行编码风格,但我可能会要求您根据库的其余部分的制作方式进行更改。
该库正在进行积极开发。 它已在一个生产应用中使用。
即使大多数 API 来自 Swift 标准库,它们将来可能会发生变化; 但您不必担心,因为发布将遵循 语义化版本 2.0.0。
LimitedOrderedSet 在 MIT 许可证下分发。 有关详细信息,请参见 LICENSE。