Objective c 如何在不使用循环目标c的情况下比较中的两个动态数组
我是iOS新手,在比较两个阵列时遇到了一个问题。我试过这个密码Objective c 如何在不使用循环目标c的情况下比较中的两个动态数组,objective-c,nsarray,nsset,Objective C,Nsarray,Nsset,我是iOS新手,在比较两个阵列时遇到了一个问题。我试过这个密码 if ([arr1 isEqualToArray:arr2]) { NSLog(@"Print the output to update..."); } 但这对我不起作用,因为我的数组是这样的 arr1=[@"1",@"2",@"3",@"4",@"5",@"6"]; arr2=[@"2"]; NSSet *set1 = [NSSet setWithArray:arr1]; NSSet *set2 = [NSS
if ([arr1 isEqualToArray:arr2])
{
NSLog(@"Print the output to update...");
}
但这对我不起作用,因为我的数组是这样的
arr1=[@"1",@"2",@"3",@"4",@"5",@"6"];
arr2=[@"2"];
NSSet *set1 = [NSSet setWithArray:arr1];
NSSet *set2 = [NSSet setWithArray:arr2];
if ([set1 isEqualToSet:set2]) {
// equal
}
所以,我尝试了这样的代码
arr1=[@"1",@"2",@"3",@"4",@"5",@"6"];
arr2=[@"2"];
NSSet *set1 = [NSSet setWithArray:arr1];
NSSet *set2 = [NSSet setWithArray:arr2];
if ([set1 isEqualToSet:set2]) {
// equal
}
但是,这对我不起作用。在我的例子中,arr1来自web服务,而arr2来自核心数据。您是否可以提出其他建议来比较这两个阵列
在if条件下,我正在更新代码,在else条件下,我正在插入
if([arr1 isEqualToArray:arr2])
{
NSManagedObjectContext *context = [self managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"EntityName" inManagedObjectContext:context]];
NSError *error = nil;
NSArray *results = [context executeFetchRequest:request error:&error];
NSManagedObject* favoritsGrabbed = [results objectAtIndex:0];
[favoritsGrabbed setValue:@"1" forKey:@"Key"];
// Save the object to persistent store
if (![context save:&error]) {
NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
}
}
else
{
if (self.device) {
// Update existing device
[device setValue:Audit forKey:@"key1"];
[device setValue:MethodID forKey:@"key2"];
[device setValue:CheckPointID forKey:@"key3"];
[device setValue:GlobalStringChk forKey:@"key4"];
[device setValue:RegionID forKey:@"key5"];
[device setValue:BranchID forKey:@"key6"];
[device setValue:SiteID forKey:@"key7"];
[device setValue:AuID forKey:@"key8"];
[device setValue:userid forKey:@"key9"];
[device setValue:StringIndex forKey:@"key10"];
} else {
// Create a new device
NSManagedObject *newDevice = [NSEntityDescription insertNewObjectForEntityForName:@"EntityName" inManagedObjectContext:context];
[newDevice setValue:Audit forKey:@"key1"];
[newDevice setValue:MethodID forKey:@"key2"];
[newDevice setValue:CheckPointID forKey:@"key3"];
[newDevice setValue:GlobalStringChk forKey:@"key4"];
[newDevice setValue:RegionID forKey:@"key5"];
[newDevice setValue:BranchID forKey:@"key6"];
[newDevice setValue:SiteID forKey:@"key7"];
[newDevice setValue:AuID forKey:@"key8"];
[newDevice setValue:userid forKey:@"key9"];
[newDevice setValue:StringIndex forKey:@"key10"];
}
}
听着,我需要比较数组,以便更新核心数据中的值,如果数组不相等,则需要插入它们。因此,我不能使用循环。请查看其else条件,如果我使用循环,则在循环运行之前插入数据,并且我想在单击时插入一个值。因此,我不能使用循环 如果您试图确定一个数组中的元素是否存在于另一个数组中,可以尝试以下操作
NSArray * firstArray = @[@"1",@"2",@"3",@"4"];
NSArray * secondArray = @[@"2",@"10",@"20"];
for(int index = 0 ; index < [firstArray count] ; index++)
{
NSString * element = [firstArray objectAtIndex:index];
if([secondArray containsObject:element])
{
//do stuff
//This block will execute only when element == @"2"
}
}
NSArray*firstArray=@[@“1”、“2”、“3”、“4”];
NSArray*secondArray=@[@“2”、@“10”、@“20”];
for(int index=0;index<[firstArray count];index++)
{
NSString*元素=[firstArray objectAtIndex:index];
if([secondArray containsObject:element])
{
//做事
//此块仅在元素==@“2”时执行
}
}
这里有很多方法
使用嵌套循环了解相等元素的确切位置:
for(int i= 0; i<arr2.count; i++){
for(int j= 0; j<arr1.count; j++){
if(arr1[j] == arr2[i])
NSLog(@"index position: %d element %@:", j, array1[j]);
}
}
for(int i=0;i
你可以试试这个。您提供的上述数据对我有用。试试这个
arr1=[@"1",@"2",@"3",@"4",@"5",@"6"];
arr2=[@"2"];
//compare result
BOOL bol = (arr1.count == arr2.count);
// if count equal
if (bol) {
for (NSInteger i = 0; i < arr1.count; i++) {
NSString *str1 = [arr1 objectAtIndex:i];
NSString *str2 = [arr2 objectAtIndex:i];
if (![str1 isEqualToString:str2]) {
bol = NO;
break;
}
}
}
根据您的评论和标题,我猜:
if([arr1 isEqualToArray:arr2])
到
检查arr1
是否包含arr2
的第一个元素(即arr2[0]
)
HTH你在比较什么,两个数组中没有相等的元素?@vaibhav没有比较count比较它是否包含相同的值?只需使用循环即可,无论是count还是相同的值。@vaibhav当我尝试使用循环时,它会崩溃,因为两个数组的计数都不同。您是否试图知道一个数组中的元素是否存在于另一个数组中?没有工作吧,它是块里的圆锥体。@Muju什么,代码工作正常,除非数组中有其他数据类型(不是NSStrings),否则这取决于它们是否是用户定义的类,如果它们是用户定义的类,则需要重写类中的isEqual方法,如果没有,代码应该正常工作。我添加了类似以下NSString*元素的内容=[NSString stringWithFormat:@“%@”,“firstArray objectAtIndex:index];但在其他部分,我需要插入值,它根据第一个数组计数插入值。但我只想插入一个值,只更新一个元素。如何在没有循环的情况下执行相同的操作。您的答案是正确的,但是。我希望没有for循环。当我使用arr2[0]它崩溃了。如果我使用arr2,它不会执行if块。你没有提供太多细节,在这个例子中,崩溃是什么?可能的共同原因。如果
arr1
不是数组或它没有元素,则会发生崩溃。当我使用没有for循环的代码时。它的if块不执行。在你回复后,我尝试了我的代码,没有if条件。这是得到执行。我认为第二个数组中只有一个对象,否则必须循环数组中的一个对象才能得到准确的结果。希望你能理解这一点,并解决这个问题。如果不使用loop,我怎么做。@vainhav我不想使用loop.y?。这里的长者已经因为无法预见的情况而搁置了您的问题,因为我知道这是一个简单的问题,您可以自己解决。@vainbhav因为它会在循环运行之前插入数据。@Muju在我的ans中没有插入。正如您在这里提出的问题,请先确定您的依赖关系并澄清您的疑问。请查看完整的问题。在if条件下,我正在更新代码,在else条件下,我正在插入代码。
if([arr1 isEqualToArray:arr2])
if([arr1 containsObject:arr2[0]])