如何在Julia中判断一组语句是否恰好有一个为真?
Julia中验证布尔序列恰好有一个为true的高效实现
方法一:利用布尔值求和(简洁直观)
在Julia里,true等价于1,false等价于0,直接对布尔数组求和并判断结果是否等于1,就能实现需求:
# 符合条件的示例(恰好一个true) sum([1 == 1, 2 == 1, 3 == 2]) == 1 # 返回 true # 不符合条件的示例(两个true) sum([1 == 1, 2 == 2, 3 == 1]) == 1 # 返回 false
这种写法简洁易读,对于大多数常规场景效率足够——Julia的sum函数经过高度优化,执行速度很快。
方法二:短路遍历函数(性能优先)
如果布尔序列较长,或者需要在找到第二个true时立即终止计算(避免不必要的遍历),可以自定义一个短路函数:
function exactly_one_true(bools) found_true = false for b in bools if b if found_true # 已找到过一个true,当前是第二个,直接返回false return false else found_true = true end end end # 遍历结束后,返回是否恰好找到一个true return found_true end
测试不同场景:
exactly_one_true([1 == 1, 2 == 1, 3 == 2]) # true exactly_one_true([1 == 1, 2 == 2, 3 == 1]) # false exactly_one_true([false, false, false]) # false exactly_one_true([true]) # true
这个函数在遇到第二个true时会立即返回,无需遍历剩余元素,在长序列或前半段就有多个true的场景下性能更优。
内容的提问来源于stack exchange,提问作者Shayan
相关产品推荐
相关产品推荐

