Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 检查数组是否包含两个对象_Ios_Objective C_Nsarray_Foundation - Fatal编程技术网

Ios 检查数组是否包含两个对象

Ios 检查数组是否包含两个对象,ios,objective-c,nsarray,foundation,Ios,Objective C,Nsarray,Foundation,我试图实现containsObject,但有两个参数,这可能吗 目前我有: if ([ myArray containsObject:@"Object1", @"Object2"]){ return result; } else { return NO; } 显然有太多的争论。我已经翻阅了苹果的文档,但还没有找到任何东西。有什么建议吗 参数太多,containsObject用于单个对象。您可以阅读它的官方文档来解决问题,使用&&操作符并分别对每个对象调用containsObje

我试图实现containsObject,但有两个参数,这可能吗

目前我有:

if ([ myArray containsObject:@"Object1", @"Object2"]){
    return result;
} else {
    return NO;
}
显然有太多的争论。我已经翻阅了苹果的文档,但还没有找到任何东西。有什么建议吗

参数太多,containsObject用于单个对象。您可以阅读它的官方文档来解决问题,使用&&操作符并分别对每个对象调用containsObject

if ([myArray containsObject:@"Object1"] && [myArray containsObject@"Object2"]){
    return result;
} else {
return NO;
}
参数太多,containsObject用于单个对象。您可以阅读它的官方文档来解决问题,使用&&操作符并分别对每个对象调用containsObject

if ([myArray containsObject:@"Object1"] && [myArray containsObject@"Object2"]){
    return result;
} else {
return NO;
}
为什么不这样做呢

if ([ myArray containsObject:@"Object1" ] && [ myArray containsObject:@"Object 2" ] ){
    return result;
} else {
    return NO;
}
为什么不这样做呢

if ([ myArray containsObject:@"Object1" ] && [ myArray containsObject:@"Object 2" ] ){
    return result;
} else {
    return NO;
}

你必须对它们进行单独评估。例如:

bool MONNSArrayContainsAllObjectsIn(NSArray* const pArray, NSArray* const pSought) {
 assert(pArray);
 assert(pSought);
 assert(0 < pSought.count);

 for (id at in pSought) {
  if (false == [pArray containsObject:at]) {
   return false;
  }
 }
 return true;
}
在这种情况下,如果您使用的是已知数量的元素2,那么您可以避免创建临时数组-如果您希望进行优化并写出所有需要的变量,包括参数。其他答案详细说明了这种方法


如果要执行大型阵列和许多比较,NSSet可能更适合您的任务。

您必须单独评估它们。例如:

bool MONNSArrayContainsAllObjectsIn(NSArray* const pArray, NSArray* const pSought) {
 assert(pArray);
 assert(pSought);
 assert(0 < pSought.count);

 for (id at in pSought) {
  if (false == [pArray containsObject:at]) {
   return false;
  }
 }
 return true;
}
在这种情况下,如果您使用的是已知数量的元素2,那么您可以避免创建临时数组-如果您希望进行优化并写出所有需要的变量,包括参数。其他答案详细说明了这种方法


如果要执行大型数组和许多比较,NSSet可能更适合您的任务。

containsObject只接受一个参数。使用&&operator.containsObject只接受一个参数。使用&&运算符。起初,这似乎不必要地复杂,但制定一种更抽象/灵活的方法来检查错误是有意义的。你能解释一下康斯特的目的/好处吗?如果它们是不可变的NSArray,为什么需要常量?使用varargs也可以避免创建临时NSArray。@mc01本例中的常量应用于指针,而不是对象。constobjc对象在实践中不是很有用。将const应用于指针只是声明指针的值不能更改。这与对象是否存在常量无关。与const-introduction的许多用法一样,它不是必需的,而是为了帮助开发人员。常量指针禁止的操作示例:++pArray,-pArray,pArray=nil,pArray+=2,pArray=0,pArray=pSought@JoshCaswell绝对+1。但是,我建议在我的答案中使用这种方法,而不是variadics,因为它更安全。@mc01不客气。pArray=someOtherObj是const禁止的案例的一个例子。但是,*pArray=*someOtherPointer实际上是对引用对象的赋值。使用ObjC类型的编译器禁止此赋值,但对于C类型,例如int*、float*、struct*,它是完全合法的。在这种情况下,const对编译器来说并不是有用的信息——它对程序员来说很有用,如果指针被重新分配或以其他方式变异,编译器将发出错误。很可能,程序员并不打算修改参数。首先,这似乎不必要地复杂,但制定一种更抽象/灵活的方法来检查错误是有意义的。你能解释一下康斯特的目的/好处吗?如果它们是不可变的NSArray,为什么需要常量?使用varargs也可以避免创建临时NSArray。@mc01本例中的常量应用于指针,而不是对象。constobjc对象在实践中不是很有用。将const应用于指针只是声明指针的值不能更改。这与对象是否存在常量无关。与const-introduction的许多用法一样,它不是必需的,而是为了帮助开发人员。常量指针禁止的操作示例:++pArray,-pArray,pArray=nil,pArray+=2,pArray=0,pArray=pSought@JoshCaswell绝对+1。但是,我建议在我的答案中使用这种方法,而不是variadics,因为它更安全。@mc01不客气。pArray=someOtherObj是const禁止的案例的一个例子。但是,*pArray=*someOtherPointer实际上是对引用对象的赋值。使用ObjC类型的编译器禁止此赋值,但对于C类型,例如int*、float*、struct*,它是完全合法的。在这种情况下,const对编译器来说并不是有用的信息——它对程序员来说很有用,如果指针被重新分配或以其他方式变异,编译器将发出错误。很可能,程序员并不打算修改参数。续