从 NSArray 获取单个属性的 NSArray

Posted

技术标签:

【中文标题】从 NSArray 获取单个属性的 NSArray【英文标题】:Getting an NSArray of a single attribute from an NSArray 【发布时间】:2011-05-11 18:14:34 【问题描述】:

我正面临一个非常常规的场景。

我有一个 NSArray,它有一个自定义类型的对象,比如 Person。 Person 类具有以下属性:firstName、lastName 和 age。

如何从具有 Person 对象的 NSArray 中获取仅包含一个属性的 NSArray?

类似:

NSArray *people;
NSArray *firstNames = [people getArrayOfAttribute:@"firstName" andType:Person.Class]

我有一个解决方案,可以编写一个 for 循环并填写 firstNames 数组,但我不想这样做。

【问题讨论】:

是不是类似于字典数组 为什么不想循环数组? 我不想手动循环数组只是为了节省代码行并以优雅的方式实现我正在处理的东西。 【参考方案1】:

NSArray 将使用 KVC 为您处理此问题

NSArray *people ...;
NSArray *firstName = [people valueForKey:@"firstName"];

这将为您提供数组中每个条目的 firstName 值的数组

【讨论】:

【参考方案2】:

查看 NSMutableArray 中的 filterUsingPredicate: 方法,基本上你创建一个 NSPredicate 对象来定义如何过滤数组。

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Predicates/Articles/pUsing.html#//apple_ref/doc/uid/TP40001794-CJBDBHCB

本指南将为您提供概述,并有一个处理数组的部分。

【讨论】:

+1:这是正确的,但除非它是一个庞大的数组,否则只需使用 for 循环就可以工作,并且没有使用 Predicates 的麻烦。 他的问题不是关于过滤数组,而是关于从数组中的一个键值创建一个数组。【参考方案3】:

你也可以使用基于块的枚举:

NSArray *people;  // assumably has a bunch of people
NSMutableArray *firstNames = [NSMutableArray array];

[people enumerateObjectsUsingBlock: 
 ^(id obj, NSUInteger idx, BOOL*flag)
     // filter however you want...
     [firstNames addObject:[Person firstName]];
 ];

如果你有一群人,它的好处是快速高效......

【讨论】:

酷。我忘记了 KVC 会这样做。谢谢你的提醒。 (已投票)

以上是关于从 NSArray 获取单个属性的 NSArray的主要内容,如果未能解决你的问题,请参考以下文章

NSArray,如何根据属性的值获取项目[重复]

从 NSDictionary 对象的 NSArray 中,如何获取唯一的 NSArray

从 NSArray 动态生成 NSPredicate

从 NSArray 使用 UIPicker 获取 titleForRow - Swift

是否可以从 AppDelegate 获取 NSArray?

从 NSArray 获取 JSON 数据