我想知道isEqualToArray实际上是做什么的...

我有一个大小为160的数组,每个数组包含一个包含11个条目的字典,但是我可以仅基于第一列(包含更改行的日期)进行比较。

现在,我可以使用一个简单的for周期做到这一点:

        BOOL different = FALSE;
        for (int index = 0 ; index < [newInfo count] ; ++index)
            if (![[[oldInfo objectAtIndex:index] objectForKey:@"Update"] isEqual:[[newInfo objectAtIndex:index] objectForKey:@"Update"]]) {

                different = TRUE;
                break;
            }
        if (different) {
        }
        else
            NSLog(@"Contact information hasn't been updated yet");

或者我可以使用内置的isEqualToArray方法:
        if ([oldInfo isEqualToArray:newInfo])
            NSLog(@"Contact information hasn't been updated yet");
        else {
            NSLog(@"Contact information has been updated, saving new contact information");
            [newInfo writeToFile:path atomically:YES];
        }

现在,如果假设isEqualToArray仅为每个单元格调用isEqualTo,则for-loop方法的运行时间是isEqualToArray的时间的1/11(只需要比较一列而不是11)。

也许我在优化方面实在是太过费力了……(我参加过很多比赛,这些比赛的运行​​时间受到限制,并且我感到后遗症)。

最佳答案

当您知道两个对象都是数组时,isEqualTo<Class>方法是检查相等性的一种比for循环更快的方法。
isEqualTo<Class>用于提供对相等性的特定检查。因此isEqualToArray:检查数组包含相等数目的对象。

因此,据我所知,当您知道两个对象是数组时,可以说isEqualToArray是更好的选择。

09-27 20:53