NSArray 等价于 Map

2023-12-14

给定一个NSArray of NSDictionary对象(包含类似的对象和键)是否可以编写执行映射到指定键的数组?例如,在 Ruby 中可以通过以下方式完成:

array.map(&:name)

它只节省了几行,但我在 NSArray 上使用了一个类别。您需要确保您的块永远不会返回零,但除此之外,对于以下情况,它可以节省时间-[NSArray valueForKey:]行不通的。

@interface NSArray (Map)

- (NSArray *)mapObjectsUsingBlock:(id (^)(id obj, NSUInteger idx))block;

@end

@implementation NSArray (Map)

- (NSArray *)mapObjectsUsingBlock:(id (^)(id obj, NSUInteger idx))block {
    NSMutableArray *result = [NSMutableArray arrayWithCapacity:[self count]];
    [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        [result addObject:block(obj, idx)];
    }];
    return result;
}

@end

用法很像-[NSArray enumerateObjectsWithBlock:]:

NSArray *people = @[
                     @{ @"name": @"Bob", @"city": @"Boston" },
                     @{ @"name": @"Rob", @"city": @"Cambridge" },
                     @{ @"name": @"Robert", @"city": @"Somerville" }
                  ];
// per the original question
NSArray *names = [people mapObjectsUsingBlock:^(id obj, NSUInteger idx) {
    return obj[@"name"];
}];
// (Bob, Rob, Robert)

// you can do just about anything in a block
NSArray *fancyNames = [people mapObjectsUsingBlock:^(id obj, NSUInteger idx) {
    return [NSString stringWithFormat:@"%@ of %@", obj[@"name"], obj[@"city"]];
}];
// (Bob of Boston, Rob of Cambridge, Robert of Somerville)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSArray 等价于 Map 的相关文章

随机推荐

  • NextAuth /api/auth/* 在 Vercel 部署上始终返回 404,但在本地工作

    每当我尝试导航到登录页面时 它都会重定向到 api auth error关于 vercel 部署 在本地 它按预期导航和工作 通过检查网络选项卡 第一个失败的网络请求是 api auth providers 不太确定哪里出了问题 pages
  • 上下文不保存更改并出现错误 1550

    我正在尝试更新实体并保存更改 我总是收到以下错误 The operation couldn t be completed Cocoa error 1550 Method BOOL updateEvent EventDTO eventDTO
  • SCNNode 没有出现在正确的位置

    我下载了wall2 obj来自 Google Blocks 的文件 然后我使用 Blender 将扩展名更改为 dae墙节点没有出现在它应该出现的地方 墙节点放置的位置与应放置的位置 枢轴点位置问题 在搅拌机中改变pivot point的位
  • 如何从 Spring data MongoDB 中的 AggregationOperation 列表创建聚合?

    我想创建一个可以在 MongoOperations 的aggregate 函数中使用的聚合 因此 为了创建聚合 我使用了 AggregationOperation 列表 如下所示 ApplicationContext ctx new Ann
  • 从 JavaScriptExecutor 的 ExecuteScript 获取值

    我有一个需要价值的问题 string someValue IJavaScriptExecutor Global Driver ExecuteScript publication title val Console WriteLine som
  • Symfony2 +Vagrant 性能 - 运行缓慢 - 加速?

    我已经开始使用 vagrant 和 Symfony2 来开发 Web 项目 我使用的是Windows 性能非常慢 因为不支持nfs挂载 我已将缓存放入内存中 这提供了异国情调的提升 禁用了 xdebug 如发布的here 然而 在 Wind
  • 角度形式数组单选按钮

    我正在尝试将单选按钮组添加到 FormArray 问题是 当我选择一个值时 它会更改 FormArray 每个成员的值 我知道这与 formControlName 有关 但是我不知道如何使 formControlName 动态化 我看过这个
  • 如何检查 BigQuery 表中的 JSON 对象列中是否存在空值

    我参考了 GCP Big 查询文档 如下链接所示 但没有成功实现使用这些函数从 Big 查询表中检索非空值 JSON 数据类型列值的目标 参考帮助 https cloud google com bigquery docs reference
  • ReactJS:通过 props 从父级改变子级状态

    免责声明 我已经看过Reactjs 如何修改父级的子状态或道具 并且不相信答案符合我的问题 所以我有一个可重用的 有状态的对话组件 它根据其状态呈现不同的 DOM 我还必须能够控制从父级渲染哪个 DOM TL DR 我应该如何改变父组件的子
  • 多个服务层和数据库事务

    我只是想知道如何最好地处理跨多个服务层的事务 服务层使用 ORM 来存储和检索数据库 交易是否应该在各个服务层内被了解和处理 或者它们应该由另一层处理 例如 我有两个针对用户和客户端的服务层 我想 1 创建并保存新客户端2 创建并保存新用户
  • SortedList<>、SortedDictionary<> 和 Dictionary<>

    我发现SortedList
  • 线程“main”java.sql.SQLException中出现异常:用户“@”localhost'访问被拒绝(使用密码:NO)

    Exception in thread main java sql SQLException Access denied for user localhost using password NO at com mysql cj jdbc e
  • 带有对象列表的 OpenAPI 查询字符串参数

    我正在尝试记录OpenAPI一个查询字符串 看起来像 filtered 0 id code filtered 0 value 12345 并包含具有属性的对象列表id and value My yaml文档如下所示 parameters n
  • JVM 规范中引用大小的混乱

    JVM 规范规定引用仅占用一个局部变量槽 jvms12 2 6 1 此外它还指出double and long 占用两个局部变量槽 因为它们是 64 位的 这是否意味着所有 JVM 兼容的实现都必须使用 32 位寻址 64 位 JVM 如何
  • Ruby/Rails 哈希火箭语法 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 有人能给我指点一本很好的入门书来解释 Ruby Rails 中的不同语法特征吗 例如 为什么我看到的一些例子是这样的myMethod x z 和其他人一样myMethod x gt
  • Android webView在后台加载

    我有一个应用程序 我想打开网络视图 现在我正在以最简单的方式加载网络视图 我想在后台加载网页 这样用户就不会有等待时间 可能在后台运行的服务或先前的活动中 我浏览了论坛 找不到该主题的参考 将给予帮助 谢谢 您可以将 Web 视图的可见性设
  • 为什么 http.Request 参数必须是指针?

    package main import net http func main http HandleFunc func w http ResponseWriter r http Request w Write byte hello worl
  • 具有选择性属性突出显示的语法荧光笔 - VS Addin

    是否有任何 VS 添加用于突出显示整个代码中的特定代码块或属性 谢谢 皮尤什 是的 有件事可以帮助你 视觉辅助X加载项来自http www wholetomato com 它有很多功能 包括突出显示光标下的符号 如果我正确理解你的问题
  • WSDL 或 wsimport 和 wsdl (mono) 都严重损坏

    EDIT我从下面给出的示例开始 但现在我有了 尝试了 W3C 规范中的示例 修复另一个错误后 绑定被称为StockQuoteSoapBinding在一个地方 StockQuoteBinding在另一篇文章中 它给出了同样的问题 尝试过单声道
  • NSArray 等价于 Map

    给定一个NSArray of NSDictionary对象 包含类似的对象和键 是否可以编写执行映射到指定键的数组 例如 在 Ruby 中可以通过以下方式完成 array map name 它只节省了几行 但我在 NSArray 上使用了一