在未知的 NSMutableArray 深度中搜索值

2024-01-02

好吧,我问了错误的问题,所以我编辑了原来的问题。

我将数组存储在数组中,以及 NSDictionaries。它是一种实用程序类型的应用程序,没有固定的结构,用户可以根据需要输入嵌套信息。

理想情况下,我需要一种方法来滚动浏览给定参数(一种类的类型,可能是字典键)的数组的全部内容。这是一个例子..

NSMutableArray *array = [[NSMutableArray alloc]init];

NSMutableDictionary *enteredItem = [[NSMutableDictionary alloc]init];

[enteredItem setObject:@"i'm a title"       forKey:@"title"];
[enteredItem setObject:@"i'm an id"         forKey:@"id"];
[enteredItem setObject:@"i'm a description" forKey:@"description"];
[enteredItem setObject:@"i'm a timestamp"   forKey:@"timestamp"];
[enteredItem setObject:array                forKey:@"items"];


[array addObject:enteredItem];
[array addObject:anotherDictionary];
[array addObject:moreDictionaries];

所以在上面的例子中,我需要找到包含@“i'm an id”的字典(并返回它)。

希望我的问题很清楚。谢谢你尽你所能的帮助。


递归方法是正确的,但如果您还不知道递归,我不确定代码示例是否非常有帮助。这是一个可行的解决方案:

添加这些方法:

- (id)findObjectWithKey:(id)key inArray:(NSArray *)array
{
    for (id object in array)
    {
        if ([object isKindOfClass:[NSArray class]])
        {
            return [self findObjectWithKey:key inArray:object];
        }
        else if ([object isKindOfClass:[NSDictionary class]])
        {
            return [self findObjectWithKey:key inDictionary:object];
        }
    }
    return nil;
}

- (id)findObjectWithKey:(id)key inDictionary:(NSDictionary *)dict
{
    for (id subKey in dict)
    {
        id object = [dict objectForKey:subKey];
        if ([subKey isEqual:key])
        {
            return object;
        }
        else if ([object isKindOfClass:[NSArray class]])
        {
            return [self findObjectWithKey:key inArray:object];
        }
        else if ([object isKindOfClass:[NSDictionary class]])
        {
            return [self findObjectWithKey:key inDictionary:object];
        }
    }
    return nil;
}

然后要找到你的对象,只需说:

id object = [self findObjectForKey:@"title" inArray:array];

要修改方法以查找特定对象并返回字典键,请执行以下操作:

- (id)findKeyWithObject:(id)key inArray:(NSArray *)array
{
    for (id object in array)
    {
        if ([object isKindOfClass:[NSArray class]])
        {
            return [self findKeyWithObject:key inArray:object];
        }
        else if ([object isKindOfClass:[NSDictionary class]])
        {
            return [self findKeyWithObject:key inDictionary:object];
        }
    }
    return nil;
}

- (id)findKeyWithObject:(id)object inDictionary:(NSDictionary *)dict
{
    for (id key in dict)
    {
        id subObject = [dict objectForKey:key];
        if ([subObject isEqual:object])
        {
            return key;
        }
        else if ([subObject isKindOfClass:[NSArray class]])
        {
            return [self findKeyWithObject:object inArray:object];
        }
        else if ([subObject isKindOfClass:[NSDictionary class]])
        {
            return [self findKeyWithObject:object inDictionary:object];
        }
    }
    return nil;
}

然后要找到你的钥匙,只需说:

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

在未知的 NSMutableArray 深度中搜索值 的相关文章

  • 自动调整大小完成后如何获取帧大小

    我想知道 如何以及何时 viewDidLoad viewWillAppear viewDidAppear 可以获得自动调整大小以适合其父视图的 UIViews 框架大小 从你的问题中不清楚你为什么想要它 但我想这是为了布局你的子视图 幸运的
  • iPhone 上的最大蓝牙连接数是多少?

    如果您对此有任何见解 那么了解连接之间是否存在很大的延迟也会很高兴 蓝牙协议规定连接是点对点的 因此称为 配对 但不同的站可以同时使用不同的配置文件 每个配置文件一次仅支持一个连接 您可以同时与汽车建立立体声耳机连接并与笔记本电脑建立数据连
  • 如何向 JSQMessagesViewController 单元添加自定义视图,使其包含一个带有一些按钮和文本视图的视图?

    我在用https github com jessesquires JSQMessagesViewController issues 1820 https github com jessesquires JSQMessagesViewCont
  • iOS 4.2.1 丢失文件?

    这是我第一次使用最新的 xcode 3 2 5 和新的 iOS 4 2 1 当我在设备上运行应用程序时 我收到以下运行时错误 无法读取 Developer Platforms iPhoneOS platform DeviceSupport
  • iOS 解决方案仅当图像尚未使用 SDWebImage 缓存在内存中时才加载带有动画的图像

    我已经为这个问题苦苦挣扎了几天 以前我使用 AFNetworking 类别来加载和缓存图像 但它的回调中没有提供缓存类型 所以我过去常常在每个控制器中跟踪哪些图像已经加载 我浏览了 SDWebImage 它提供了我正在寻找的东西 SDIma
  • iOS 开发: [[self navigationController] viewControllers]; 有哪些原因?会返回零吗?

    以下语句返回零 NSArray viewControllersInNavStack self navigationController viewControllers 这个语句是在导航堆栈中大约四层深度的视图控制器中调用的 所以我不明白它如
  • 如何在我的 iOS 项目中添加和执行 .sql 文件?

    我找到了很多关于在 iOS 中使用 SQLite 数据库的教程 但没有找到任何直接引用 sql 文件的内容 谁能告诉我如何将现有的 SQL 数据库链接到我的应用程序 编辑 这是一个 MySQL 转储 我们有一个基于浏览器的抽认卡程序 现在我
  • 尝试从独立的 Apple Watch 应用发出网络请求

    当应用程序是独立应用程序时 Apple Watch 是否无法进行网络通话 即使手表已连接到 iPhone 我正在使用新的独立应用程序目标 它没有附带可以发出 WatchConnectivity 请求的配对 iOS 应用程序 我十有八九收到
  • 自动布局和ios5

    我正在使用故事板 我已经使用了自动布局 但它不适用于 ios5 并且会崩溃 所以我想删除它 但是 如何取消选中自动布局 但如果我取消选中自动布局 我如何为 iPhone 4 和 5 设置屏幕 Regards 您可以在 IB 中禁用自动布局
  • XCode:代码覆盖率数据生成失败

    当我尝试运行单元测试时 我在 Objective C 项目中遇到了这个可怕的问题 我已经尝试了以下所有方法 根据各种 SOF 帖子 清除派生数据 删除 Library 中的所有模拟器设置 重新启动 XCode 重新启动MBP 多次重置模拟器
  • 如何使用 ZBar 读取器的 scanCrop 属性?

    我正在使用 iPhone 的 ZBar SDK 来扫描条形码 我希望阅读器仅扫描特定的矩形而不是整个视图 为此需要将阅读器的 scanCrop 属性设置为所需的矩形 我很难理解必须设置的矩形参数 有人可以告诉我如果在纵向视图上它的坐标是 我
  • 如何将十六进制数组转换为 UIImage?

    有几个与使用 P25mi 动态打印图像相关的未解答问题 没有一个得到公认的答案 下面有几个链接 如何将图像转换为位图代码以便在 iPhone 中进行蓝牙打印 https stackoverflow com questions 1383828
  • swift 中的负数模

    负数模如何在 swift 中工作 当我执行 1 3 时 它给出 1 但余数是 2 其中有什么问题 雨燕余数运算符 计算余数 整数除法 a b a a b b where 是截断整数除法 在你的情况下 1 3 1 1 3 3 1 0 3 1
  • 如何使用自签名证书为 TLS 创建 iOS NWConnection?

    我正在尝试将 Apple 的新 NWConnection 类用于我的 MQTT 客户端 为了进行测试 我需要能够创建到本地测试代理的 TLS 连接 该代理具有自签名证书 到目前为止 我只是使用以下命令设置连接 self connection
  • iPhone 标签栏上的未读计数

    在 Cocoa Touch 上实现 TabBar 上图标的未读计数的最佳方法是什么 我想模仿 SMS 或邮件应用程序的行为 向我的应用程序的用户显示未读消息计数 并使用包含数字的红点 您正在寻找的属性称为徽章 您可以通过执行以下操作来设置它
  • 在 Swift 中检查一个数组是否包含另一个数组的所有元素

    我想为数组编写一个扩展来检查一个数组是否包含另一个数组的所有元素 在我的用例中它是字符串对象 但我一直得到 Cannot convert value of type T Generator Element to expected argum
  • 如果 NSExtensionActivationRule 设置为仅音频,则共享扩展不会出现在有功能的应用程序中

    我正在尝试创建一个共享扩展 用户可以从任何有能力的应用程序上传她的录音 该文档甚至有一个简单的示例 请参阅声明共享或操作扩展支持的数据类型 https developer apple com library content document
  • 增加 NSData 的长度

    基本上 我有一个 46 个字符的 NSString 我将其转换为 NSData 我需要将字符串填充到 48 个字符 仅在 NSString 末尾添加 是行不通的 所以 我只是使用以下方法增加了 NSData 的长度 NSString str
  • 如何自动为 Swift 类创建初始化程序?

    UPDATE 使用结构而不是类 struct 在很多方面都更好 它有自己的初始化器 这是我的模型课 是否有可能创建init自动方法 每次我都必须将所有变量一一初始化 这会花费很多时间 class Profile var id String
  • 下标:使用字符串枚举访问我的字典值

    我想做类似的事情 使用字符串枚举访问我的字典值 我试图重载字典的下标但没有成功 访问字典 let district address JsonKeys district 其中 JsonKeys 是 enum JsonKeys String c

随机推荐

  • 在特定集合中创建团队项目的 TFS 权限

    我们的 TFS 2010 服务器中有多个集合 该服务器托管我们所有的 TFS 相关服务 我想允许特定的程序员在他的专用集合中创建团队项目 他属于该集合的 TFS 管理员组 当他尝试创建新的团队项目时 失败并出现报告权限错误 我知道他还需要
  • 如何清除按钮的颜色?

    不仅如何将按钮的颜色清除为默认颜色 而且还要在我的代码中的什么时刻执行此操作 我已经尝试了一切 但没有运气 当我单击按钮时 我设置了一些具有不透明度的绿色 现在 当我单击 下一步 按钮时 也会发生同样的情况 但第一个按钮仍设置为绿色 我需要
  • 未找到默认实体翻译的翻译形式

    我尝试设置翻译表格 http a2lix fr bundles translation form http a2lix fr bundles translation form and https github com Atlantic18
  • 实际问题是什么? MySql?

    Hello 我已经尝试解决这个问题很多天了 但没有解决 我是一个BEGINNER 请为我做一些暗淡的事情 我的问题是什么 从我的角度来看 有很多石头需要翻过去 只需要显示在正确的方向 我已经完全重新启动了计算机并卸载了 mysql 至少 4
  • 传单 - 防止加载 MaxBounds 之外的图块

    我在尝试加载不存在且超出 MaxBounds 的图块时遇到传单问题 jsfiddle 复制我的图块集的问题 https jsfiddle net f2Ljzpbh 1 最后还尝试了以下方法 map setBounds new L LatLn
  • React Native WebView 中的身份验证

    我有一个工作的反应本机应用程序 我想通过添加一个显示的选项卡以灵活的方式扩展它WebView 在这里 用户将能够看到他们的个人资料信息 因此我需要能够对每个用户进行身份验证 我认为这不会很难实现 因为用户已经在应用程序中进行了身份验证 但显
  • Spark 将 DataFrame 作为 HTTP Post 请求的正文发送

    我有一个数据框 我想将其作为正文发送HTTP Post要求 什么是最好的Sparky怎么办 如何控制HTTP请求的数量 如果记录数量变大 有没有办法将发送数据帧拆分为多个 HTTP Post 调用 假设我的数据框是这样的 user id c
  • isInitialized - 此时无法访问 Lateinit var 的支持字段

    我正在尝试检查是否lateinit属性已初始化 在 Kotlin 1 2 中 我们现在有isInitialized方法 当我在声明 Lateinit 属性的类中执行此操作时 它会起作用 但是当我尝试从另一个类调用它时 我收到以下警告 此时无
  • jQuery 窗口滚动事件。每滚动 XX 像素

    我正在使用优秀的 jQuery Reel 插件 http jquery vostrel cz reel http jquery vostrel cz reel 对于一个项目 我想绑定到窗口滚动事件 因此当用户向下滚动页面时 插件前进 1 帧
  • 如何使用 jQuery 滚动到某个元素?

    我希望页面滚动到页面顶部的 div 我有页面其他部分的按钮 但是当我滚动到底部并单击按钮时 这不起作用 它不会转到页面顶部 这是代码笔 https codepen io Filizof pen xygWyp editors 1010 htt
  • 等待容器端口打开超时(本地主机端口:[32773] 应该正在侦听)

    我正在尝试使用https github com testcontainers testcontainers scala https github com testcontainers testcontainers scala这是固有的htt
  • QMYSQL可用但无法加载

    QSqlDatabase QMYSQL 驱动程序未加载 QSqlDatabase 可用驱动程序 QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7 我挣扎了两天才弄清楚 我做了我的研究相信我 这
  • 在 dplyr tidyverse 中按组对不同行数进行采样

    我想按组从数据框中采样行 但问题是 我想根据另一个表中的数据对不同数量的记录进行采样 这是我的可重现数据 df lt data frame Stratum rep c High Medium Low 10 id c 1 30 Value r
  • ActiveJob::SerializationError - 不支持的参数类型:时间/日期时间

    我正在使用 Rails 5 和 ActiveJob 来处理后台任务 我正在尝试传递一个序列化的对象as json到我的工作 但我收到以下错误 ActiveJob SerializationError Unsupported argument
  • 如何将 Passport 和 Angular-UI 路由结合起来

    我想知道如何将 Angular UI Routing 与 Passport 结合起来 我找到的所有示例都使用 node js 路由 var routerApp angular module routerApp ui router route
  • 使用 json_modify.py 更改 JSON 键名称

    如何使用更改 JSON 键名称json 修改 py https github com integr8ly installation blob master library json modify py 我有以下数组 我想更改public i
  • System.Data.OracleClient 不适用于 64 位 Oracle 客户端

    我设计了一个 C 应用程序来连接到 Oracle 数据库并更改架构用户密码 我的参考程序集是来自以下位置的 System Data OracleClient C Program Files x86 Reference Assemblies
  • Rails 4 中的 has_many 'conditions' 选项相当于什么?

    有人能告诉我在 Rails 4 中执行以下行的等效方法是什么吗 has many friends through gt friendships conditions gt status accepted order gt first nam
  • MSBuild - 如何复制可能存在或不存在的文件?

    我遇到一种情况 我需要在 MSBuild 脚本中复制一些特定文件 但它们可能存在也可能不存在 如果它们不存在也没关系 我就不需要它们了 但标准
  • 在未知的 NSMutableArray 深度中搜索值

    好吧 我问了错误的问题 所以我编辑了原来的问题 我将数组存储在数组中 以及 NSDictionaries 它是一种实用程序类型的应用程序 没有固定的结构 用户可以根据需要输入嵌套信息 理想情况下 我需要一种方法来滚动浏览给定参数 一种类的类