简体   繁体   English

如何比较两个NSMutableArrays?

[英]How to compare two NSMutableArrays?

I'm new to iOS development and having trouble comparing two NSMutableArray . 我是iOS开发的新手,无法比较两个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. 其中一个(代码中的appDelegate.array )包含来自数据库的数据,另一个(代码中的dataArray )包含来自服务器响应的数据。

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. 现在我想(的每个元素比较dataArray )与全( appDelegate.array ),如果(的一些元素dataArray )在(存在appDelegate.array ),然后什么都不做或断裂,如果不存在,然后将其添加到数据库中。

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


                }
        }

    }

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;
    }
  }
}
- (BOOL)isEqual:(ModelClassName *)object
{
    if ([self.ID isEqualToString:object.ID]) {
        return YES;
    }
    return NO;
}

Subclass your model object and override isEqual method, then use 子类化您的模型对象并覆盖isEqual方法,然后使用

[array containsObject:] method
if ([array1 isEqualToArray:array2]){

   // Equal..
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM