NSMutableArray - 查询没有枚举的项目?

时间:2009-06-15 08:48:00

标签: objective-c cocoa

在.Net中使用LINQ我可以从数组中选择符合特定条件的项目,即来自名为People的数组:

var cleverPeople = People.Where(o=>o.IQ>110);

我能对NSMutableArray做些什么吗?我有很多项目,并用循环枚举它是非常昂贵的性能明智。

4 个答案:

答案 0 :(得分:7)

答案 1 :(得分:4)

我创建了一个名为Linq to ObjectiveC的简单库,它是一组提供Linq样式查询接口的方法。在您的情况下,您需要Linq-to-ObjectiveC where方法:

NSArray* peopleWhoAreSmart = [people where:^BOOL(id person) {
    return [[person iq] intValue] > 110;
}];

这将返回他们的智商> 110。

答案 2 :(得分:0)

另一种选择是使用Higher Order Messaging来实现选择。例如,

NSArray* cleverPeople = [[People select] greaterIQ:110];

其中greaterIQ将成为People的类别方法。

答案 3 :(得分:0)

当然这些(10.6 +)天我们有很好的API,比如indexOfObjectPassingTest来做

这样的事情
var smartPeople = [People indexesOfObjectsPassingTest:^BOOL(id person, NSUInteger idx, BOOL *stop)
                  {  return person.iq > 110; } ];