1

有没有更快的方法来比较 2 个 NSArrays?我需要知道两个数组中是否存在缺口并获取它们的索引。

看看我的方法,我认为我们可以更快地做一些事情

-(void)classPseudo
{
     AppDelegate  *app = [[UIApplication sharedApplication]delegate];
     NSString * documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
     NSString *fullFileName = [NSString stringWithFormat:@"%@/contactArray.txt", documentsPath];
     NSMutableArray *newOnlineArray = [[NSMutableArray alloc]initWithContentsOfFile:fullFileName];
     NSUInteger count = [newOnlineArray count];
     NSUInteger count2 = [app.messagePseudo count]; 
     for (NSUInteger index = 0; index < count; index++)
    {
        for (NSUInteger index2 = 0; index2 < count2; index2++)
        {

        dict1= [newOnlineArray objectAtIndex:index];
        st1 = [dict1 objectForKey:@"pseudo"];
        dict2= [app.messagePseudo objectAtIndex:index2];
         st2 = [dict2 objectForKey:@"expediteur"];
                if ([st2 isEqualToString:st1]) 
            {
                NSLog(@"YESS %d",index);

                 }
            else {
                NSLog(@"NOOOON");

            }
         }
    }
}

任何帮助都将提前获得 .Thanx。

4

1 回答 1

1

你没有很清楚地解释你的问题。例如,您没有解释所涉及的数据结构。(显然是两个字典数组。)你没有准确地说出你想要什么作为输出。而对于那些不会说法语的人来说,“nicks”在一种情况下对应于“pseudo”而在另一种情况下对应于“expediteur”并不是很清楚。您还没有解释预期的数据集。例如,每个伪预期在第一个数组中出现多次还是几次?第二个中的 expediteur 也是如此。

无论如何,您可以构建一个“伪”值到索引集的映射。然后,遍历第二个数组并在地图中查找 expediteurs。

NSMutableDictionary* pseudoIndexes = [NSMutableDictionary dictionary];
[newOnlineArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
    NSString* pseudo = [obj objectForKey:@"pseudo"];
    NSMutableIndexSet* indexes = [pseudoIndexes objectForKey:pseudo];
    if (!indexes)
    {
        indexes = [NSMutableIndexSet indexSet];
        [pseudoIndexes setObject:indexes forKey:pseudo];
    }
    [indexes addIndex:idx];
}];

[app.messagePseudo enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop){
    NSString* expediteur = [obj objectForKey:@"expediteur"];
    NSIndexSet* indexes = [pseudoIndexes objectForKey:expediteur];
    NSLog(@"For expediteur #%d '%@', pseudo indexes %@", idx, expediteur, indexes);
}];
于 2012-05-28T19:50:52.660 回答