Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.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 目标C-如何获得Bolean的总和?_Ios_Objective C_Arrays_Boolean - Fatal编程技术网

Ios 目标C-如何获得Bolean的总和?

Ios 目标C-如何获得Bolean的总和?,ios,objective-c,arrays,boolean,Ios,Objective C,Arrays,Boolean,通过下面的代码,我可以得到如下输出: 0 1. 一, 我想要的是输出这些布尔值的总和,在我的例子中,结果是:2,因为我们有0+1+1 代码[更新]: 不是求和布尔值(这是违反直觉的),而是循环使用任何你正在使用的来获得布尔值,如果你得到了是,则增加一个计数器。这将是您拥有的Yes数 如果你有一个布尔数组,你可以用一个谓词过滤这个数组来得到YES值,结果数组的长度就是你拥有的YES数 编辑以添加操作注释后的代码示例 递增计数器 NSUInteger numberOfBools = 0; CLLoc

通过下面的代码,我可以得到如下输出: 0 1. 一,

我想要的是输出这些布尔值的总和,在我的例子中,结果是:2,因为我们有0+1+1

代码[更新]:


不是求和布尔值(这是违反直觉的),而是循环使用任何你正在使用的来获得布尔值,如果你得到了是,则增加一个计数器。这将是您拥有的Yes数

如果你有一个布尔数组,你可以用一个谓词过滤这个数组来得到YES值,结果数组的长度就是你拥有的YES数

编辑以添加操作注释后的代码示例

递增计数器

NSUInteger numberOfBools = 0;
CLLocationCoordinate2D tg = CLLocationCoordinate2DMake(location.latitude, location.longitude);
GMSCoordinateBounds *test = [[GMSCoordinateBounds alloc]initWithPath:path];
if ([test containsCoordinate:tg1]) { ++numberOfBools; }
if ([test containsCoordinate:tg2]) { ++numberOfBools: }
... // other tests here;

// numberOfBools now contains the number of passing tests.
添加完整代码后再次编辑

您可以只添加布尔,因为布尔只是整数。e、 g:

int sum = 0;

CLLocationCoordinate2D tg = CLLocationCoordinate2DMake(location.latitude, location.longitude);
GMSCoordinateBounds *test = [[GMSCoordinateBounds alloc]initWithPath:path];
BOOL test3 = [test containsCoordinate:tg];
//Obtain bolean values :

BOOL testX = /* other test */;
BOOL testY = /* other test */;

sum = test3 + testX + testY
然而,这是一个坏主意,因为布尔值不一定是1或0。它们是0,而不是0

BOOL只是一个typedef-ed字符:typedef-signed-char-BOOL;YES和NO是1和0,但是BOOL变量=2是完全有效的

例如:

- (int) testX
{
    if(inState1) return 1;
    if(inState2) return 2;

    else return 0;
}

BOOL textXResult = [self testX]; //Might return 2, this is still equivalent to YES.
最好的解决方案是迭代你的布尔值,而不是计算“是”的数目

int sum = (test3 ? 1 : 0) + (testX ? 1 : 0) + (testY ? 1 : 0);
而不是那么奇怪的变体:

#define BOOL_TO_INT(val) ((val) ? 1 : 0)

int sum = BOOL_TO_INT(test3) + BOOL_TO_INT(testX) + BOOL_TO_INT(testY);

另一种方法是假设如果任何一个值为false,则整个数组为false,因此,在数组上循环,直到找到false值,然后断开:

BOOL retval = true;  //return holder variable

/*'boolsNumArray' is an NSArray of NSNumber instances, converted from BOOLs:

    //BOOL-to-NSNumber conversion (makes 'boolsNumArray' NSArray, below)!
    '[myNSArray addObject:[NSNumber numberWithBool:yourNextBOOL]]' 

*/
for(NSNumber* nextNum in boolsNumArray) {
    if([nextNum boolValue] == false) {
        retval = false;
        break;
    }
}

return retval;

我只看到一个布尔。其他两个在哪里?我想你真正想做的就是数一数有多少布尔值是不是它们的和。如果你追求的是总体布尔值,例如逻辑上对所有布尔值求和,你可以简单地将它们相乘,记住将任何负值提升到零。负BOOL false<0乘以负将得到一个正BOOL true>0,这不是您想要的,即乘以2个假BOOL将得到“true”,这是错误的。但是,与第一种计数方法相比,第二种方法很可能非常慢。这取决于何时/何地获得布尔值。一个简单的循环和计数就可以了。但是如果您必须经常这样做,那么创建一个静态谓词来遍历列表可能会更快。IIRC,创建谓词的代价很高,它们运行起来很快。@Abizern,你能提供一个代码片段吗,这样我就能有一个更清晰的想法了,谢谢你@user3340961当您的代码只显示一个测试时,很难给出代码片段。@Abizern-不太可能,在本例中,您的意思是数组将被调整大小,然后大小就是答案。调整阵列大小的问题在于,这本身就是一项昂贵的操作。我看到了,并将进一步研究您的IIRC,也许有一种不同的实现方式:-这似乎仍然是一件奇怪的事情,但至少它确保布尔值最终为零或一。我不知道这个@bdesham有什么奇怪之处,但我完全同意你的其余评论。我在考虑int sum=!测试3?:0+!testX?:0+!易怒?:0;“但我觉得这很奇怪。”詹姆斯韦伯斯特再三考虑,一旦你把它放在上下文中,它看起来可能不会太奇怪:-啊!一个定义,用火杀死它。作为一个静态函数可能会更好:static inline NSUInteger boolToIntegerBOOL b{return b?1:0;}Objective-C类型BOOL不是0或不是0。它是否==0或是==1。这是定义。无论如何,由于不同的原因,这仍然是一个坏主意:bool被实现为整数,但这并没有定义。因此,根据通常的C规则,BOOL对象与BOOL对象之和是BOOL对象,如果两个BOOL对象都是YES==1,那么它们的值将无效。您误解了我写的内容。任何为零的BOOL都是NO/false,而非零的BOOL是YES/true。您可以编写BOOL test3=[test containsCoordinate:tg]=0; 以确保它是0或1。但我认为在BOOL中存储一个不同于0或1的值是一个逻辑错误,即使这是语言允许的。@James Webster不,我没有误解。如果布尔对象不是零,那么它等于YES是不正确的。Objective-C's BOOL不是C's BOOL。我在我的书中尝试了无数次。我没有错。你试过了吗?boola=2;NSLog@%d,a;NSLog@%d,a==是;产出2和0。这只适用于C的布尔。
#define BOOL_TO_INT(val) ((val) ? 1 : 0)

int sum = BOOL_TO_INT(test3) + BOOL_TO_INT(testX) + BOOL_TO_INT(testY);
BOOL retval = true;  //return holder variable

/*'boolsNumArray' is an NSArray of NSNumber instances, converted from BOOLs:

    //BOOL-to-NSNumber conversion (makes 'boolsNumArray' NSArray, below)!
    '[myNSArray addObject:[NSNumber numberWithBool:yourNextBOOL]]' 

*/
for(NSNumber* nextNum in boolsNumArray) {
    if([nextNum boolValue] == false) {
        retval = false;
        break;
    }
}

return retval;