gpt4 book ai didi

ios - Objective C 逻辑 OR 运算符不在 block 中求值

转载 作者:行者123 更新时间:2023-11-29 01:21:37 25 4
gpt4 key购买 nike

我正在尝试检查哪个数组元素的值彼此相等或与 NSNumber 10 相等。数组的计数为 15。问题是当我针对 NSNumber 测试值时 10 在 if 语句 中,代码似乎没有求值。

例如,在下面的数组中,代码应返回索引 0 中的值存在于索引 {0, 9, 10} 中,因为 NSNumber 1 存在于索引 0 和 10 中,并且NSNumber 10 出现在索引 9 处。

1-2-3-4-5-6-7-8-9-10-1-2-3-4-5

但是,它只评估索引 0 中的 NSNumber 值是否等于 NSNumber 1 而不是 NSNumber 10。输出是不是预期的 {0, 9, 10} 但只有 {0, 10}。

for (NSNumber *number in mutableArray) {
self.matchingIndex = [mutableArray indexesOfObjectsPassingTest:
^BOOL(NSNumber *obj, NSUInteger idx, BOOL *stop)
{
BOOL returnValue;
NSNumber *ten = [NSNumber numberWithInt:10];
if ([number isEqualToNumber:obj] || [number isEqualToNumber:ten])
{
returnValue = TRUE;
}
return returnValue;
}];
[self testIndexSet:self.matchingIndex];
}

最佳答案

您的期望不正确。 number,仅对于数组中的 @10 元素,外循环迭代器将等于 10。循环的预期结果是 1..5 元素上有两个索引,其余元素有一个索引。

如果您希望循环查找 @10 元素并将其包含在每个结果中,请更改条件...

if ([number isEqualToNumber:obj] || [number isEqualToNumber:ten])

到...

if ([number isEqualToNumber:obj] || [obj isEqualToNumber:ten])

顺便说一句,该 block 可以更简单地表述为...

NSIndexSet *matchingIndex = [mutableArray indexesOfObjectsPassingTest:^BOOL(NSNumber *obj, NSUInteger idx, BOOL *stop) {
return ([number isEqualToNumber:obj] || [obj isEqualToNumber:@10]);
}];

关于ios - Objective C 逻辑 OR 运算符不在 block 中求值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34522299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com