【问题标题】:Similar to HashSet in iPhone [duplicate]类似于 iPhone 中的 HashSet [重复]
【发布时间】:2014-08-25 11:05:49
【问题描述】:

我是java程序员。 Java 中有HashSet 的概念,它不会在Set 中添加重复元素。 iPhone 中的相似概念是什么?

请提示。

提前致谢。

【问题讨论】:

  • Foundation 框架的大部分集合类在"Collections Programming Topics" 文档中有详细描述。如果订单相关,那么您可以使用 NS(Mutable)OrderedSet。

标签: ios objective-c iphone


【解决方案1】:

您可以在 iOS 中使用 NSSet。 NSSet 是唯一项的(无序)集合。因此,您可以像这样在数组中找到唯一项:

     NSSet *uniqueElements = [NSSet setWithArray:myArray];

    // iterate over the unique items
    for(id element in uniqueElements)
       {
          // do something
       }

NSSet 很可能使用哈希算法进行插入 O(1)(与 O(n^2) 相比,通过迭代检查每个项目是否唯一),但 Apple 文档没有做出这样的保证,所以你可能不应该指望那个实现细节。

如果由于某种原因您需要将唯一项保留在已排序(有序)集合中,您可以使用 -[NSSet allObjects] 将集合转回数组,然后对结果数组进行排序。

【讨论】:

  • 我希望它们与我插入时的顺序相同。 NSSet 会对此有所帮助吗?
  • 如果您希望它的顺序相同,请使用 NSOrderedSet:它是不同对象的有序集合。
【解决方案2】:

HashSetHash Table 的 Java 实现。 NSHashTable 是,我相信,可可等价物。

【讨论】:

    【解决方案3】:

    NSSet 使用 NSObject 的 has 来确保没有重复。

    NSMutableSet 如果你需要添加东西到集合中。

    【讨论】:

    • 所以我使用NSSet,对实现我的要求有帮助吗?
    • 由于我不熟悉 java 我不能确认它们是 100% 相同的。但是NSSet 确实按照你的描述做了。
    • 从文档看来NSSet 是不可变的。这将使它与 Java 中的 HashSet 根本不同,并且可能无法满足要求。
    • Objective-C 就是这样工作的,只需使用NSMutableSet
    猜你喜欢
    • 2023-01-17
    • 1970-01-01
    • 2011-05-30
    • 2015-05-12
    • 2013-11-18
    • 2015-04-09
    • 2018-04-04
    • 2015-12-31
    • 1970-01-01
    相关资源
    最近更新 更多