我有一个包含 2 个元素的数组,当我尝试将其转换为 NSOrderedSet 时,它只给了我一个元素的大小
LOG("\(listTwoElement.count)")
这条线给我 2
LOG("\(NSOrderedSet.init(array: listTwoElement).count)")
这条线只给我 1 个元素
为什么转换为 NSOrderedSet 会改变数组的大小?
感谢您的帮助
我有一个包含 2 个元素的数组,当我尝试将其转换为 NSOrderedSet 时,它只给了我一个元素的大小
LOG("\(listTwoElement.count)")
这条线给我 2
LOG("\(NSOrderedSet.init(array: listTwoElement).count)")
这条线只给我 1 个元素
为什么转换为 NSOrderedSet 会改变数组的大小?
感谢您的帮助
Set是唯一元素的无序列表。如果您尝试将相同的元素放入一个集合中两次,您只会得到一个
数组是不需要唯一的元素的顺序列表。您可以在数组中多次使用相同的元素。
OrderedSet是两者的组合(但不是两者的子类)。这些项目是有序的,就像一个数组,但每个元素都必须是唯一的。
唯一元素并不(仅)意味着它们存储在内存中的不同位置,而是在某种基本意义上它们并不“相等”。每个类别可以不同地定义平等。想要定义它的类isEqual:
,hash
实现NSObjectProtocol
. (相等对象的哈希必须相等,不相等对象的哈希不需要不同)。
如果不了解您正在处理的元素的更多信息,就很难说为什么当您不期望它们被评估为相等时它们被评估为相等。我将开始研究该类的isEqual
and的实现hash
。