数组到 NSOrderedSet 将列表的大小更改为 1

Posted

技术标签:

【中文标题】数组到 NSOrderedSet 将列表的大小更改为 1【英文标题】:array to NSOrderedSet change size of list to 1 【发布时间】:2017-12-06 17:33:06 【问题描述】:

我有一个包含 2 个元素的数组,当我尝试将其转换为 NSOrderedSet 时,它只给了我一个元素的大小

      LOG("\(listTwoElement.count)")

这条线给我2

   LOG("\(NSOrderedSet.init(array: listTwoElement).count)")

这一行只给我 1 个元素

为什么转换为 NSOrderedSet 会改变数组的大小?

感谢您的帮助

【问题讨论】:

数组中的两个值必须相同。 什么是listTwoElementlistjj 是什么? @rmaddy 实际上数组中的两个值必须相同 @vadian 我读这个问题太快了。我认为有序集是从正在打印的同一个数组中创建的。但是如果你从一个数组创建一个有序集合,并且这个数组包含两个比较相等的对象,那么这个集合将只有一个对象。 @vadian 抱歉,两个是 listTwoElement 没有 listjj 我只是在过去的代码上错了。我更正了 谢谢你们的回复,数组的元素是一样的这是我的问题,我保留了 OrderedSet 现在我只放了不同的元素,现在它的工作 【参考方案1】:

Set 是唯一元素的无序列表。如果你尝试将相同的元素放入一个集合中两次,你只会得到一个

Array 是不需要唯一的元素的顺序列表。您可以在数组中多次包含相同的元素。

OrderedSet 是两者的组合(但不是两者的子类)。这些项目是有序的,就像一个数组,但每个元素都必须是唯一的。

唯一元素并不(仅)意味着它们存储在内存中的不同位置,而是在某种基本意义上它们并不“相等”。每个类别可以不同地定义平等。想要定义它的类,实现NSObjectProtocolisEqual:hash 方法。 (相等对象的哈希值必须相等,不相等对象的哈希值不必不同)。

如果不了解您正在处理的元素的更多信息,很难说为什么当您不期望它们被评估为相等时它们被评估为相等。我将开始研究isEqualhash 的类的实现。

【讨论】:

感谢您的回复,它们是一样的,这是我的问题,我让 OrderedSet 知道我只放了不同的元素,现在它可以工作了

以上是关于数组到 NSOrderedSet 将列表的大小更改为 1的主要内容,如果未能解决你的问题,请参考以下文章

如何在最后一个位置将对象添加到 NSOrderedSet?

在 iOS 中循环遍历数组

如何将不同大小的numpy数组列表保存到磁盘?

如何向 NSOrderedSet 添加值

NSOrderedSet 使用啥基础数据结构来实现

将新的核心数据对象插入到多个 NSOrderedSet 会忽略索引