【问题标题】:How can I find a number of True statements in an Array of Bools in Swift如何在 Swift 的布尔数组中找到多个 True 语句
【发布时间】: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  
        }        
    }
}

【问题讨论】:

    标签: arrays swift boolean


    【解决方案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, +)
      

      【讨论】:

        猜你喜欢
        • 2023-03-16
        • 1970-01-01
        • 2019-03-21
        • 2014-08-18
        • 1970-01-01
        • 2019-07-28
        • 2014-11-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多