How to compare two NSMutableArrays?

妖精的绣舞 提交于 2019-12-08 08:41:11

问题


I'm new to iOS development and having trouble comparing two NSMutableArray.

One of them (appDelegate.array in code) contains data coming from a database and another one (dataArray in code) contains data coming from a server response.

Now I want compare each element of (dataArray) with whole (appDelegate.array) and if some element of (dataArray) exist in (appDelegate.array) then do nothing or break and if doesn't exist then add it into database.

I tried, but am unable to do this. Below is the code I'm using.

Thank you in advance.

NSMutableArray *dataArray = [responseDictionary objectForKey:@"myDATA"];

NSLog(@"%d dataArray count", [dataArray count]);

    for (int i = 0; i < [dataArray count]; i++)
    {   
        NSLog(@"%d delegate array count",[appDelegate.array count]);

        NSInteger ID = [[[dataArray objectAtIndex:i] objectForKey:@"ID"] intValue];
        NSString *Note = [[dataArray objectAtIndex:i] objectForKey:@"Note"];
        NSString *Reminder = [[dataArray objectAtIndex:i] objectForKey:@"Reminder"];
        NSInteger Status = [[[dataArray objectAtIndex:i] objectForKey:@"Completed"]intValue];
        NSInteger DisplayOrder = [[[dataArray objectAtIndex:i] objectForKey:@"Display_Order"] intValue];

        if ([appDelegate.array count] == 0 && Note != nil) 
        {
            NSString *query = [NSString stringWithFormat:@"INSERT INTO Tasks (Note, Reminder, Status, DisplayOrder) VALUES ('%@','%@','%d','%d')",Note, Reminder, Status, DisplayOrder];

            //NSLog(@"%@",query);
            sqlite3 *database_1;

            NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
            NSString *documentsDir = [documentPaths objectAtIndex:0];
            NSString *database_Path = [documentsDir stringByAppendingPathComponent:@"TODO.sqlite"];

            if(sqlite3_open([database_Path UTF8String], &database_1) == SQLITE_OK)
            {
                sqlite3_stmt *compiledStatement_1;
                if(sqlite3_prepare_v2(database_1,[query UTF8String], -1, &compiledStatement_1, NULL) == SQLITE_OK)
                {
                    while(sqlite3_step(compiledStatement_1) == SQLITE_ROW)
                    {
                        sqlite3_step(compiledStatement_1);
                    }
                }
                sqlite3_finalize(compiledStatement_1);
            }
            sqlite3_close(database_1);

            [self readDataFromDatabase];
        }

        else 
        {
           // NSLog(@"Entered Else");

            for (int k = 0; k < [appDelegate.array count]; k++) 
            {


            objectData = [appDelegate.array objectAtIndex:k];
              //  NSLog(@"%d",objectData.ID);

                NSMutableArray *IDArray = [NSMutableArray arrayWithObject:[[NSNumber numberWithChar:objectData.ID]stringValue]];
                NSMutableArray *NoteArray = [NSMutableArray arrayWithObject:objectData.Note];
                NSMutableArray *ReminderArray = [NSMutableArray arrayWithObject:objectData.Reminder];
                NSMutableArray *StatusArray = [NSMutableArray arrayWithObject:[[NSNumber numberWithChar:objectData.Status]stringValue]];
                NSMutableArray *DisplayOrderArray = [NSMutableArray arrayWithObject:[[NSNumber numberWithChar:objectData.DisplayOrder]stringValue]];

                NSLog(@"%@ server",[NSString stringWithFormat:@"%d",ID]);
                NSLog(@"%@ database",IDArray);

                if ([CommonFunctions isValueInArray:[NSString stringWithFormat:@"%d",ID]:IDArray] && [CommonFunctions isValueInArray:Note :NoteArray] && [CommonFunctions isValueInArray:Reminder :ReminderArray] && [CommonFunctions isValueInArray:[NSString stringWithFormat:@"%d",Status] :StatusArray] && [CommonFunctions isValueInArray:[NSString stringWithFormat:@"%d",DisplayOrder] :DisplayOrderArray]) 
                {
                    NSLog(@"Present In appDelegate.array!!!");
                }
                else 
                {
                    NSString *query = [NSString stringWithFormat:@"INSERT INTO Tasks (Note, Reminder, Status, DisplayOrder) VALUES ('%@','%@','%d','%d')",Note, Reminder, Status, DisplayOrder];

                    NSLog(@"%@",query);
                    sqlite3 *database_1;

                    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
                    NSString *documentsDir = [documentPaths objectAtIndex:0];
                    NSString *database_Path = [documentsDir stringByAppendingPathComponent:@"TODO.sqlite"];

                    if(sqlite3_open([database_Path UTF8String], &database_1) == SQLITE_OK)
                    {
                        sqlite3_stmt *compiledStatement_1;
                        if(sqlite3_prepare_v2(database_1,[query UTF8String], -1, &compiledStatement_1, NULL) == SQLITE_OK)
                        {
                            while(sqlite3_step(compiledStatement_1) == SQLITE_ROW)
                            {
                                sqlite3_step(compiledStatement_1);
                            }
                        }
                        sqlite3_finalize(compiledStatement_1);
                    }
                    sqlite3_close(database_1);


                }
        }

    }

回答1:


Use

for (int i = 0; i < [dataArray count]; i++)
{  
  if ([appDelegate.array count] == 0 && Note != nil) 
  {

  }
  else
  {
    if(![appDelegate.array containsObject:[dataArray objectAtIndex:i]])
    {
      // Your code
    }
    else
    {
     // Do nothing Continue; or Break;
     Continue;
    }
  }
}



回答2:


- (BOOL)isEqual:(ModelClassName *)object
{
    if ([self.ID isEqualToString:object.ID]) {
        return YES;
    }
    return NO;
}

Subclass your model object and override isEqual method, then use

[array containsObject:] method



回答3:


if ([array1 isEqualToArray:array2]){

   // Equal..
}


来源:https://stackoverflow.com/questions/14332971/how-to-compare-two-nsmutablearrays

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!