NSMutableSet 包含重复项

2024-03-06

我有一个名为的自定义类card我需要从随机大小的卡片数组中创建一组 10 张独特的卡片。另外,我需要首先包含所有列入白名单的卡,以确保它们始终包含在内。

我的问题是白名单中的卡片(并且只有白名单)可能会在集合中重复。随机添加的卡片永远不会重复,并且计数始终正确(10)。我不明白为什么isEqual似乎有时有效,但并不总是有效。

这是我创建集合的地方(randoms是要从中挑选的潜在卡片的数组):

NSMutableSet *randomCards = [NSMutableSet setWithCapacity:10];

[randomCards addObjectsFromArray:whiteListArray];

while ([randomCards count] < 10) {
    NSNumber *randomNumber = [NSNumber numberWithInt:(arc4random() % [randoms count])];
    [randomCards addObject:[randoms objectAtIndex:[randomNumber intValue]]];
}

我重写了isEqual方法对我的card基于此处回答的另一个问题的课程:

- (BOOL)isEqual:(id)other {

if (other == self)
    return YES;
if (!other || ![other isKindOfClass:[self class]])
    return NO;
return [self isEqualToCard:other];

}

- (BOOL)isEqualToCard:(Card *)myCard {

if (self == myCard) {
    return YES;
}
if ([self cardName] != [myCard cardName] && ![(id)[self cardName] isEqual:[myCard cardName]])
    return NO;

return YES;
}

它似乎工作得很好,除了当我添加白名单卡时,我无法弄清楚我是如何得到重复的(但永远不会超过 2 个副本)。


你需要覆盖hash此外isEqual.

事实上,你always需要确保这两种方法一起工作。从苹果的文档 https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html:

如果两个对象相等(由 isEqual: 方法确定),则它们必须具有相同的哈希值。如果您在子类中定义哈希并打算将该子类的实例放入集合中,那么最后一点尤其重要。

像这样的东西应该有效:

- (NSUInteger)hash {
    return [[self cardName] hash];
}

这样,您的哈希值取决于您用于进行比较的相同信息。

哈希值由数据结构使用,例如NSMutableSet快速将对象分组到不同的存储桶中。重要的是,如果两个对象相等,则它们具有相同的哈希值。 (但是,如果两个对象具有相同的哈希值但不相等,这是可以的。因此您始终可以从hash,但是这样你的性能将与使用数组相同。数据结构!)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSMutableSet 包含重复项 的相关文章

  • 当强制退出/向上滑动以终止 iOS 应用程序而不点击横幅/警报时,如何获取推送通知有效负载?

    我正在构建一个应用程序来处理从 Parse 推送的通知 并尝试创建通知历史记录功能 我已经成功启用了后台模式 因此当应用程序在后台运行时 应用程序可以通过以下方式很好地获取有效负载application didReceiveRemoteNo
  • 致命错误:在字典中发现“地理编码地标”类型的重复键。 (Mapbox 地理编码器)

    我引用 这通常意味着要么该类型违反了 Hashable 的要求 要么此类字典的成员在插入后发生了变化 我正在使用 Mapbox Geocoder 当发生此运行时错误时 我的 XCode 将我带到线程 1 0 swift runtime on
  • 超类与类SpecificationPolicy不匹配

    我得到了一个superclass mismatch for class SpecificationPolicy尝试安装或升级某些brew 软件包时出错 例如 更新安装 supabase CLI 时 brew install supabase
  • 拖动时获取MKAnnotation的坐标

    我正在根据用户添加的注释的位置创建一条路径 MKPolyline 我想允许用户通过拖动引脚来更改路径 我目前可以做到这一点 但 MKPolyline 不会更新 直到引脚被放下 我实施了 void mapView MKMapView mapV
  • iPhone 和加密库

    我想我必须在我的 iPhone 应用程序中使用加密库 我想问你有关苹果公司实施的加密货币出口政策的影响 我需要做一些额外的事情吗 例如填写表格等 1 如果我使用 MD5 进行哈希处理 2 如果我使用对称加密 Thanks EDIT 2009
  • 使用基于约束的布局自动调整 NSTokenField 的大小

    有没有办法自动调整大小height使用约束的 NSTokenField 保持宽度恒定 sizeToFit应该有效 但事实并非如此 如果我设置一个约束来保持宽度不变并调用此方法 它将忽略约束并仅调整宽度大小 当我想要的是仅调整高度大小时 基于
  • 在故事板中的视图控制器之间滑动手势

    我希望添加左右滑动手势来在视图控制器之间进行更改 这是否可能 并且有没有一种简单的方法可以在故事板中执行此操作 谢谢 故事板允许您在两个视图控制器之间设置 Segues 我想说首先在视图之间附加 Segues 给它一个标识符 然后使用类似的
  • 如何在 Xcode 4 中在 .h 和 .m 之间切换

    刚刚安装的 Xcode 4 到目前为止一切顺利 除了 Apple 更改了所有键盘快捷键 有人知道如何在 h 和 m 之间切换吗 苹果改变了各种快捷键 但要在标头和实现之间切换 新的快捷键是 You can change it back to
  • “同时创建 xib 文件”按钮已禁用

    我在创建时遇到这个问题UIView s子类 创建 例如 UIViewControllers or UITableViewCells没关系 为什么会出现这种情况 I create view using cmd N and Xcode Vers
  • NSURL URLWithString:引发异常

    简而言之 NSURL URLWithString 似乎引发了一个例外 根据文档 如果字符串格式错误 则返回 nil 没有提到在任何情况下都会引发异常 除此之外 我还对 URL 进行编码并检查nil在将字符串转换为 URL 之前 任何人都可以
  • 从 Xcode 中的存储库中删除未引用的图像

    我从资源文件夹中删除了 default png 因为我想要为加载屏幕使用不同的图像 但我只是删除了引用 这显然是一件愚蠢的事情 我将新图像拖到资源中并尝试将名称更改为 Default png 但它不允许我这样做 我认为这是因为第一个 Def
  • 使用超类初始化器初始化类

    我有两个类 一个是另一个的子类 比如说Animal and Dog 超类有一些初始化器 比如initAnimal 子类有一些初始化器 比如initDog 问题是 从编译器的角度来看 做类似的事情是完全合法的Dog adog Dog allo
  • iOS 11 安全区域布局指南向后兼容性

    启用安全区域布局指南是否与 iOS 11 以下版本兼容 我设法使用新的安全区域布局指南并保持与 iOS 9 和 iOS 10 的向后兼容性 编辑 正如 NickEntin 的评论所指出的 此实现将假定存在状态栏 但在 iPhone X 的横
  • iOS中的performSelector有什么用

    的作用是什么执行选择器 比较 self btnClicked and self performSelector selector btnClicked void btnClicked NSLog Method Called 两者都对我来说工
  • 线程 1:信号 SIGABRT - AppDelegate.h

    main m Journey Created by Julian Buscema on 2014 07 13 Copyright c 2014 Julian Buscema All rights reserved import
  • iPhone 快照,包括键盘

    我正在寻找拍摄整个 iPhone 屏幕 包括键盘 的正确方法 我找到了一些截取屏幕的代码 CGRect screenCaptureRect UIScreen mainScreen bounds UIView viewWhereYouWant
  • 我可以知道 requireGestureRecognizerToFail 到底会做什么吗?

    谁能告诉我下面的代码行到底会做什么 我已经提到过Apples https developer apple com library ios documentation uikit reference UIGestureRecognizer C
  • 如何处理 Xcode“嵌入应用程序扩展”构建阶段

    通过添加新目标创建 共享扩展 时 Xcode 在应用程序目标设置的应用程序 构建阶段 选项卡中添加名为 嵌入应用程序扩展 的构建阶段 可以删除此阶段 但如果您尝试通过按左上角的 来添加它 您会发现可用选项中未列出 嵌入应用程序扩展 为什么会
  • 当您感兴趣的任务完成时,是什么让完成处理程序执行该块?

    我一直在询问并试图了解完成处理程序是如何工作的 我用过很多 也读过很多教程 我将在这里发布我使用的代码 但我希望能够创建自己的代码 而无需使用其他人的代码作为参考 我理解这个完成处理程序 其中调用者方法 void viewDidLoad n
  • 使用 Storyboard 时获取 NSManagedObjectContext

    目标是获取当前的 NSManagedObjectContext 以便使用 Core Data 在 iOS 4 3 中 我将 UINavigationController 的委托设置为 AppDelegate 如下所示 在 AppDelega

随机推荐

  • C++ 使用 unicode 名称保存文件问题 - 如何以跨平台方式正确保存 UTF-8 文件名?

    我想保存一个带有名称的文件 jpg我收到一个字符串 例如从文件中读取 其中包含 unicode 但我的 C 代码将其保存为 jpg我该怎么做才能正确保存它 顺便说一句 如果我只是将该字符串保存到文件中 它会正确保存 这意味着只有我保存文件名
  • 短到十六进制字符串

    有方法Integer toHexString and Long toHexString 由于某种原因他们没有实施Short toHexString 将 Short 转换为十六进制字符串的规范方法是什么 无法使用Integer toHexSt
  • 将嵌套数组简化为单级数组[重复]

    这个问题在这里已经有答案了 可能的重复 如何展平多维数组 https stackoverflow com questions 1319903 how to flatten a multidimensional array 假设我有一个这样的
  • SonarQube:一天有多少小时的技术债务?

    如果 SonarQube 说我在某个项目中有 1 天的技术债务 那么这是否会转化为 24 小时的技术债务或 8 小时的技术债务 从几小时到几天的转换是可定制的 默认情况下为 8 小时 但您可以通过转至管理 gt 配置 gt 技术债务来找到您
  • 查找不是父/祖父母/等或子/孙/等的所有链接对象的算法

    我有一个名为Device A Device可以有一位家长 Device A Device还可以有n child Devices 我有一个下拉列表 显示所有可选的Devices 我可以获得所有Devices很容易在数据库中 db Device
  • 在 Scala 中使用 @BeanProperty 而不是定义 getter/setter 函数是一个好习惯吗?

    在类中定义可以公开访问 修改的数据成员 var foo Int def foo foo Int foo foo setter function def foo foo getter function 使用注释转换它是一个好习惯吗 BeanP
  • 如何更改Resharper的字体大小?

    如何更改Resharper的字体大小 我发现文件结构 实时模板和其他 UI 组件的字体小得难以忍受 我找不到任何自定义字体大小的选项 我尝试将 Windows DPI 增加到 150 这确实有效 但会导致很多其他问题 我正在使用 Resha
  • 为定制 RISC-V imafd SOC 移植 Linux

    我正在尝试构建一个 yocto演示 coreip cli我的自定义 risc v SOC 的图像仅支持imafd指示 对于 Bitbake 使用的交叉工具链的编译 我尝试更改 openembedded core 层中的 cross binu
  • Three.js 使用 WebRTC 并应用 Shader

    我不知道如何将着色器应用于具有视频纹理的 Three js 对象 我一直在使用 webRTC 和 Three js 并使用标准材质成功将视频纹理映射到网格上 var material new THREE MeshBasicMaterial
  • 使用 SimpleAdapter 过滤 listView 数据

    我需要帮助才能使过滤发挥作用 ListView 显示正确 但是当我在搜索字段中输入字母时出现错误 java lang NullPointerException 并且应用程序关闭 这是我的活动中的代码片段 我认为我必须修复它 但不知道如何修复
  • Android 计费 v3 - 无签名

    我想要的是 检索所有购买的商品后 我需要在服务器上验证购买情况 我想使用从应用内付款收到的签名和签名数据来完成此操作 首先 我使用了应用内计费 v2 每次使用我的开发者帐户都会获得静态测试 sku 的正确签名和签名数据android tes
  • 如何在 Katalon Studio 中读取 Excel 工作表中的数据

    我可以知道如何从 Katalon Studio 中的 Excel 工作表中读取数据 以便从文件中读取 API 端点以检查其输出吗 如何在 java 中编写代码以使 URL 运行并验证来自 API 端点的响应 我已经创建了一个示例项目 htt
  • 是否可以使用 SSE 对此嵌套进行矢量化?

    我从来没有为 SSE 优化编写过汇编代码 如果这是一个菜鸟问题 我很抱歉 在this https felix abecassis me 2012 08 sse vectorizing conditional code 文章解释了如何向量化f
  • VBScript 函数中的变量范围

    我有一个关于 VBScript 中变量范围的问题 我知道有以下关键字 来自autoitscript com http www autoitscript com autoit3 docs keywords Dim htm Dim 本地范围 如
  • XRX 是唯一完全符合 W3C 的全栈 Web 应用程序“框架”吗?

    XRX 是指前端完全用 XML 方言编写 后端完全用 XML 方言编写的应用程序 并且数据在它们之间以 XML over REST 的形式传递 这是唯一完全由 W3C 维护的技术组成的 Web 应用程序堆栈 对吗 我认为回答这个问题的最佳方
  • UIScrollView 在 Swift 中不滚动

    我的 UIScrollView 不会向下滚动 我不知道为什么 我已经关注了有关此问题的 Apple 文档 IBOutlet weak var scroller UIScrollView override func viewDidLoad s
  • 限制样式表对父窗口小部件的影响?

    我正在设置 a 的背景颜色QWidget子类 当我使用样式表执行此操作时 其他组件的样式QWidget更改 例如 按钮的颜色及其外观发生变化 如何确保只有容器小部件的背景颜色发生变化 其余子组件保持不变 一种方法是指定 ID 选择器 确保设
  • 在 Android 应用程序中播放 Youtube 视频,无需使用 Android Youtube API

    有没有另一种方法可以在 Android 应用程序中播放 Youtube 视频而不使用 Android Youtube API 我们已经使用上述 API 实现了一个解决方案 但在某些设备上需要降级 Youtube 应用程序版本才能播放视频 我
  • 当我们运行任何rails命令时,可以采取什么措施来修复以下错误:“`require_relative':无法加载此类文件”

    任何 Rails 命令对我都不起作用 我通过rvm安装了几个版本的ruby 我尝试安装所有版本的 Rails 它们确实安装成功 但对于所有版本 每当我运行时 我都会遇到以下错误any我的项目目录中的rails命令 rails new blo
  • NSMutableSet 包含重复项

    我有一个名为的自定义类card我需要从随机大小的卡片数组中创建一组 10 张独特的卡片 另外 我需要首先包含所有列入白名单的卡 以确保它们始终包含在内 我的问题是白名单中的卡片 并且只有白名单 可能会在集合中重复 随机添加的卡片永远不会重复