[英]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.