簡體   English   中英

通過CGRectIntersectsRect過濾nsmutable數組

[英]Filter nsmutable array by CGRectIntersectsRect

我只想從SKSpriteNode數組中提取與預定幀相交的元素。 我可以通過for迭代來做到這一點:

 for (SKSpriteNode* Object in Array) {
    if (CGRectIntersectsRect(Frame,Object.frame)) {
         //extraction code
    }
 }

但是此方法的性能似乎很差,有沒有一種方法可以更快地執行此操作? 我已經嘗試過這樣的事情:

NSPredicate *Predicate = [NSPredicate predicateWithFormat:@"CGRectIntersectsRect(Frame,SELF.frame)"];
   NSArray *Results = [Array filteredArrayUsingPredicate:Predicate];

但這會產生錯誤“無法將函數名稱'CGRectIntersectsRect'解析為受支持的選擇器(CGRectIntersectsRect)”。 怎么了? 使用謂詞而不是for可以使我獲得一些性能提升?

由於謂詞解析器無法識別獨立的C函數,因此可以從塊中創建謂詞:

NSPredicate *intersects = [NSPredicate predicateWithBlock:^BOOL(id obj, NSDictionary *bindings) {
    return CGRectIntersectsRect(Frame, obj.frame);
}];
NSArray *results = [Array filteredArrayUsingPredicate:intersects];

不過,我不確定與循環相比是否會提高性能,因為比較次數將保持不變。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM