2009-06-15 67 views
7

使用LINQ在.net中我可以選擇從一個陣列相匹配的數組中的特定標準,即所謂的人的項目:NSMutableArray - 查詢沒有枚舉的項目?

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

有什麼相似的我可以做一個NSMutableArray?我有很多項目,並用循環枚舉它是非常昂貴的性能明智的。

回答

7
+0

美麗。正是我需要的。 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

+3

這是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

0

另一種選擇是使用Higher Order Messaging來實現select。例如,

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

其中,更大的IQ將成爲人的類別方法。

4

我創建了一個簡單的庫,名爲Linq to ObjectiveC,它是提供Linq式查詢接口的一組方法。在你的情況,你需要的Linq-to-ObjectiveC where方法:

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

這返回的人數組,其中他們的智商> 110

0

當然這些(10.6+)天我們已經得到了很好的API,如indexOfObjectPassingTest到做像

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