如何在 Swift 的布尔数组中找到多个 True 语句
Posted
技术标签:
【中文标题】如何在 Swift 的布尔数组中找到多个 True 语句【英文标题】:How can I find a number of True statements in an Array of Bools in Swift 【发布时间】:2017-02-20 10:46:06 【问题描述】:我是一名新开发人员,似乎无法弄清楚如何在布尔数组中找到 True 语句的数量。我知道如何按索引而不是按值查找。任何帮助将不胜感激。
let arrayElement = [Bool](repeating: false, count: 10)
var before: [[Bool]] = [[Bool]](repeating: arrayElement, count:10)
for i in 0 ..< 10
for j in 0 ..< 10
if arc4random_uniform(3) == 1
before[i][j] = true
【问题讨论】:
【参考方案1】:计算一维数组中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
【讨论】:
【参考方案2】:由于您正在处理一个数组数组,因此计算也将有两个步骤。首先使用map
将每个内部数组转换为其真值计数,然后与reduce
聚合得到最终结果:
let countTrue = before.map $0.filter$0.count.reduce(0, +)
【讨论】:
以上是关于如何在 Swift 的布尔数组中找到多个 True 语句的主要内容,如果未能解决你的问题,请参考以下文章