Objective c 如何快速知道对象是否从NSArray中的对象引用?
起初,我很困惑为什么我的程序员会这么做,而不仅仅是使用NSArray containsObject。然后我意识到。他没有看物体是否在阵列中 数组的类型为BGAddressAnnotation。每个都包含对myBiz的引用。他想知道奥达诺旅馆是否有生意Objective c 如何快速知道对象是否从NSArray中的对象引用?,objective-c,Objective C,起初,我很困惑为什么我的程序员会这么做,而不仅仅是使用NSArray containsObject。然后我意识到。他没有看物体是否在阵列中 数组的类型为BGAddressAnnotation。每个都包含对myBiz的引用。他想知道奥达诺旅馆是否有生意 有没有一种更快的方法,比如说,keyPath,或者他的方法确实是你可以尝试下面的方法,我很确定这会更快。如果不是的话,我至少觉得它更好看 BOOL isnot=true; for(BGAddressAnnotation * old
有没有一种更快的方法,比如说,keyPath,或者他的方法确实是你可以尝试下面的方法,我很确定这会更快。如果不是的话,我至少觉得它更好看
BOOL isnot=true;
for(BGAddressAnnotation * old in oldAnnot){
if(new.myBiz==old.myBiz){
//[self animationOutAndInBetweenNew:new andOld:old];
isnot=false;
}else{
}
}
请注意,我已经颠倒了BOOL变量的含义,因为我认为应该避免使用双负(例如,isfind=YES比isnot=NO好)。他这样做的速度非常快。更少的语句不一定“更快”。(请记住,任何解决方案都必须遍历数组,引用该字段,并对其进行比较。我唯一要做的更改是复制new.myBiz,而不是每次迭代都重新获取它。)这是关于双重否定的很好且有用的解释。我喜欢。
NSArray *oldAnnot = ...
NSArray *oldAnnotBizs = [oldAnnot valueForKeyPath:@"@unionOfObjects.myBiz"];
BOOL isFound = [oldAnnotBizs containsObject:new.myBiz];