2012-10-10 47 views
1

我正在過濾一個數組,可以有一個謂詞可以有很多對象。我想限制因性能原因返回的結果。該數組沒有排序,所以一旦達到限制,我想停止搜索。用謂詞過濾數組,限制結果?

這可能嗎?我不確定是否通過謂詞指令或其他方式。

+0

你居然打在內存中的數據過濾性能問題? –

+0

@DavidRönnqvist我的過濾計算量很大,所以儘管很多對象都是昂貴的。 –

回答

2

我認爲你可以使用的indexesOfObjectsPassingTestobjectsAtIndexes這個組合:

NSUInteger count = 0; 
NSUInteger limit = ...; 
NSIndexSet *set = [myArray indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) { 
    BOOL pass = ... // check if object passes test; 
    if (pass) { 
     count++; 
     if (count >= limit) 
      *stop = YES; // stops further processing of the array 
    } 
    return pass; 
}]; 

NSArray *filteredArray = [myArray objectsAtIndexes:set]; 
+0

是的,這是一個可能的解決方案,謝謝。我可以使用'evaluateWithObject:'來測試對象。我更喜歡更優雅的方法,但如果沒有其他的東西,我會使用'* PassingTest:'方法。 –