如何在 Swift 的布尔数组中找到多个 True 语句

How can I find a number of True statements in an Array of Bools in Swift(如何在 Swift 的布尔数组中找到多个 True 语句)
本文介绍了如何在 Swift 的布尔数组中找到多个 True 语句的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是一名新开发人员,似乎无法弄清楚如何在布尔数组中找到 True 语句的数量.我知道如何按索引而不是按值查找.任何帮助将不胜感激.

I am a new developer and cannot seem to figure out how to find the number of True statements in an Array of Booleans. I know how to find by index but not by value. Any assistance would be appreciated.

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  
        }        
    }
}

推荐答案

条目数的方法

一种方法是过滤您的 Bool 元素数组(对于 true)并简单地计算过滤后数组中剩余元素的数量

entriesina1Darray

One method would be to filter your array of Bool elements (for true) and simply count the number of remaining elements in the filtered array

let arr = [false, true, true, false, true]
let numberOfTrue = arr.filter{$0}.count
print(numberOfTrue) // 3

另一种方法是reduce(展开)数组并为每个等于true

Another approach is to reduce (unfold) the array and increment a counter for each element that equals true

let arr = [false, true, true, false, true]
let numberOfTrue = arr.reduce(0) { $0 + ($1 ? 1 : 0) }
print(numberOfTrue) // 3

或者,传统的 for 循环(带有条件循环签名)方法,与 reduce 方法相当:

Or, a traditional for loop (with conditional in loop signature) approach, comparable top the reduce method:

let arr = [false, true, true, false, true]
var trueCounter = 0
for bElem in arr where bElem { trueCounter += 1 }
print(trueCounter) // 3

实现一维数组

通过简单地应用 .joined()[[Bool]] 数组上依次构造一个 [Bool] 数组.

toachievea1Darray

The methods above can easily be applied to an array of arrays (of Bool elements: type [[Bool]]) by simply applying .joined() on the [[Bool]] array to sequentially construct a [Bool] array.

/* '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 }

这篇关于如何在 Swift 的布尔数组中找到多个 True 语句的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Why local notification is not firing for UNCalendarNotificationTrigger(为什么没有为UNCalendarNotificationTrigger触发本地通知)
Pushing UIViewController above UITabBar(将UIView控制器推送到UITabBar上方)
Dropbox Files.download does not start when number of files in folder is gt; 1000(当文件夹中的文件数为1000时,Dropbox Files.Download不会启动)
appearance().setBackgroundImage Not Working On Custom Class(外观().setBackoundImage在自定义类上不起作用)
Show/Hide barButtonItem(显示/隐藏barButtonItem)
java.lang.IllegalStateException: SimpleTypeImpl should not be created for error type(异常:不应为错误类型创建SimpleTypeImpl)