在.Net中使用LINQ我可以从数组中选择符合特定条件的项目,即来自名为People的数组:
var cleverPeople = People.Where(o=>o.IQ>110);
我能对NSMutableArray做些什么吗?我有很多项目,并用循环枚举它是非常昂贵的性能明智。
答案 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; } ];