比较2个阵列?

时间:2012-05-28 19:28:36

标签: iphone xcode nsmutablearray

比较2个NSArray有更快的方法吗?我需要知道两个数组中是否存在缺刻并得到它们的索引。

看我的方法我认为我们可以更快地做点什么

-(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提前。

1 个答案:

答案 0 :(得分:1)

您没有非常清楚地解释您的问题。例如,您尚未解释所涉及的数据结构。 (显然是两个字典数组。)你还没有准确地说出你想要的输出。而对于那些不讲法语的人来说,并不是很清楚,“nicks”在一个案例中对应于“伪”而在另一个案例中对应于“expediteur”。您尚未解释预期的数据集。例如,每个伪预期会在第一个数组中出现多次或几次?第二个是加速的。

无论如何,您可以为索引集构建一个“伪”值的映射。然后,迭代第二个数组并在地图中查找加速器。

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);
}];