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