使用LINQ在.net中我可以選擇從一個陣列相匹配的數組中的特定標準,即所謂的人的項目:NSMutableArray - 查詢沒有枚舉的項目?
var cleverPeople = People.Where(o=>o.IQ>110);
有什麼相似的我可以做一個NSMutableArray?我有很多項目,並用循環枚舉它是非常昂貴的性能明智的。
使用LINQ在.net中我可以選擇從一個陣列相匹配的數組中的特定標準,即所謂的人的項目:NSMutableArray - 查詢沒有枚舉的項目?
var cleverPeople = People.Where(o=>o.IQ>110);
有什麼相似的我可以做一個NSMutableArray?我有很多項目,並用循環枚舉它是非常昂貴的性能明智的。
另一種選擇是使用Higher Order Messaging來實現select。例如,
NSArray* cleverPeople = [[People select] greaterIQ:110];
其中,更大的IQ將成爲人的類別方法。
我創建了一個簡單的庫,名爲Linq to ObjectiveC,它是提供Linq式查詢接口的一組方法。在你的情況,你需要的Linq-to-ObjectiveC where方法:
NSArray* peopleWhoAreSmart = [people where:^BOOL(id person) {
return [[person iq] intValue] > 110;
}];
這返回的人數組,其中他們的智商> 110
當然這些(10.6+)天我們已經得到了很好的API,如indexOfObjectPassingTest
到做像
var smartPeople = [People indexesOfObjectsPassingTest:^BOOL(id person, NSUInteger idx, BOOL *stop)
{ return person.iq > 110; } ];
美麗。正是我需要的。 NSPredicate * pred = [NSPredicate predicateWithFormat:@「isFired == NO」]; NSPredicate * pred = [NSPredicate predicateWithFormat:@「isFired == NO」]; \t NSArray * filtered = [self.arenamap filteredArrayUsingPredicate:pred]; – jdee 2009-06-15 09:48:19
這是NSPredicate vs LINQ的一個很好的寫法。 http://www.cimgf.com/2008/08/24/cocoa-tutorial-c-linq-or-cocoa-key-paths-and-nspredicate/ – Lounges 2009-06-15 16:48:45