How to implement a Mutable Ordered Set generic type formerly known as NSMutableOrderedSet in native Swift?(如何在本机 Swift 中实现以前称为 NSMutableOrderedSet 的可变有序集泛型类型?)
问题描述
我正在尝试实现一个通用的 Mutable Ordered Set 类型,它需要符合许多协议才能像 Swift 中的 Array 和 Set 一样运行.首先要实现泛型类型元素需要符合 Hashable
并且通用结构需要符合 RandomAccessCollection
, SetAlgebra
, ExpressibleByArrayLiteral
,AdditiveArithmetic
, RangeReplaceableCollection
和 MutableCollection
.我还想允许下标访问它的 SubSequence
添加对 PartialRangeThrough
、PartialRangeUpTo
、PartialRangeFrom
和 的支持>UnboundedRange
也是如此.
这是我的通用 OrderedSet
结构声明:
public struct OrderedSet{公共初始化(){}私有 var 元素:[元素] = []私有变量集:设置<元素>= []}
尽管这是一个自我回答的问题,但我真的很感激并鼓励新的答案,对此实施的一些反馈和/或关于如何修复/改进它的建议:
编辑/更新:
sorted
方法按预期工作,但变异 sort
它甚至没有改变元素顺序.
可变集合
声明变异
函数排序()
当 Self 符合 RandomAccessCollection 且 Element 符合 Comparable 时可用.
var numbers: OrderedSet = [15, 40, 10, 30, 60, 25, 5, 100]数字[0..<4]//[15, 40, 10, 30]numbers[0..<4].sorted()//[10, 15, 30, 40]numbers[0..<4].sort()//[15, 40, 10, 30, 60, 25, 5, 100]打印(数字)//打印[15, 40, 10, 30, 60, 25, 5, 100]"//但它应该打印[10, 15, 30, 40, 60, 25, 5, 100]"
我该如何解决?
可变有序集的原生 Swift 实现:
public struct OrderedSet{公共初始化(){}私有 var 元素:[元素] = []私有变量集:设置<元素>= []}
<块引用>
符合 MutableCollection 协议
要将 MutableCollection 协议的一致性添加到您自己的自定义集合中,请升级您的类型的下标以支持读取和写入访问.存储在 MutableCollection 实例的下标中的值随后必须可以在同一位置访问.也就是说,对于可变集合实例 a、索引 i 和值 x,以下代码示例中的两组赋值必须相等:
扩展 OrderedSet: MutableCollection {公共下标(索引:索引)->元素 {获取{元素[索引]}//放 {//守卫 set.update(with: newValue) == nil else {//insert(remove(at: elements.firstIndex(of: newValue)!), at: index)// 返回/
本文标题为:如何在本机 Swift 中实现以前称为 NSMutableOrderedSet 的可变有序集泛型类型?


- 如何在 iPhone 模拟器中重置 NSUserDefaults 数据? 2022-01-01
- UITextView 内容插图 2022-01-01
- URL编码Swift iOS 2022-01-01
- 在 Iphone SDK 的导航栏上添加多个按钮 2022-01-01
- 使用自动布局向 UIScrollView 添加动态大小的视图 2022-01-01
- 网上有没有好的 UIScrollView 教程? 2022-01-01
- 类似于 Mail.app 的 iPad 模态视图控制器? 2022-01-01
- SetOnItemSelectedListener上的微调程序错误 2022-01-01
- GPS状态的广播接收器? 2022-01-01
- Xcode 7.3 中带有 UILabel 的 UIStackView 2022-01-01