Objective c 如何在不使用循环目标c的情况下比较中的两个动态数组

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

我是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 = [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]])