Set 集合
2017-10-11 本文已影响10人
craig_wang
解释:
- 根据hashValue,确保元素不重复的(类数组)集合
特点:
- 元素必须实现Hashable协议
- 可以和数组一样使用和创建
let sets: Set<obj: Hashable> = []
// 其他详细操作 - 看文档
注意:
a) 测试中发现Set的存储结构更像Dic
b) 在测试插入和删除时发现:
- 获取新元素的hashValue,和已存入Set的hashValues比较(不是遍历Set,重新获取每个元素的新hashValue)。
- 存在问题:就算同一个元素对象,在存和取的操作中hashValue不同,就会导致错误。需要当心(代码逻辑如下<不完整>)
let sets: Set<Obj> = []
let obj = Obj() // hashValue = 0
sets.insert(obj)
obj.changeHashValue = 1 // 这步操作可以修改对象属性(该属性能导致协议方法返回的hashValue改变即可)
sets.remove(obj) // obj对象不能被移除(感觉和字典操作一样,使用obj的新hashValue找sets中对应的元素,没找到<而不是遍历sets所有元素,对所有元素做hashValue来比较>)