计算一维数组中true条目数的方法
一种方法是过滤您的 Bool 元素数组(对于 true)并简单地计算过滤后数组中剩余元素的数量
let arr = [false, true, true, false, true]
let numberOfTrue = arr.filter{$0}.count
print(numberOfTrue) // 3
另一种方法是reduce(展开)数组并为每个等于true的元素增加一个计数器
let arr = [false, true, true, false, true]
let numberOfTrue = arr.reduce(0) { $0 + ($1 ? 1 : 0) }
print(numberOfTrue) // 3
或者,传统的for 循环(带有条件循环签名)方法,与reduce 方法相当:
let arr = [false, true, true, false, true]
var trueCounter = 0
for bElem in arr where bElem { trueCounter += 1 }
print(trueCounter) // 3
应用于你的例子:使用joined()实现一维数组
上述方法可以很容易地应用于数组数组(Bool 元素:类型[[Bool]]),只需在[[Bool]] 数组上应用.joined() 以顺序构造[Bool] 数组。
/* 'before' is of type [[Bool]], constructed as described
in the question */
let numberOfTrueAlt1 = before.joined().filter{$0}.count
let numberOfTrueAlt2 = before.joined().reduce(0) { $0 + ($1 ? 1 : 0) }
var numberOfTrueAlt3 = 0
for bElem in before.joined() where bElem { numberOfTrueAlt3 += 1 }