Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何计算数组数组的'false'元素_Arrays_Swift - Fatal编程技术网

Arrays 如何计算数组数组的'false'元素

Arrays 如何计算数组数组的'false'元素,arrays,swift,Arrays,Swift,我的问题与在数组中使用false对元素进行计数的有效方法有关。我现在知道如何迭代每个数组并计算元素是否为true或false我正在寻找更有效的方法 问题的例子: let n = 4 var board = Array(repeating:Array(repeating:true, count:n), count:n) let qPos = [4,4] board[qPos[0] - 1][qPos[1] - 1] = false for x in 0..<n{ for y

我的问题与在数组中使用
false
对元素进行计数的有效方法有关。我现在知道如何迭代每个数组并计算元素是否为
true
false
我正在寻找更有效的方法

问题的例子:

let n = 4
var board = Array(repeating:Array(repeating:true, count:n), count:n)

let qPos  = [4,4]

board[qPos[0] - 1][qPos[1] - 1] = false


for x in 0..<n{
    for y in 0..<n {
        if (x == qPos[0] - 1) {
            board[x][y] = false
        }

        if (y == qPos[1] - 1) {
            board[x][y] = false
        }

        if (y == x) {
             board[x][y] = false
        }
    }
}
//How to calculate all negative elements of the board ? In this code output should be 10
设n=4
var板=数组(重复:数组(重复:true,计数:n),计数:n)
设qPos=[4,4]
线路板[qPos[0]-1][qPos[1]-1]=错误
对于x/0..my 3解决方案:

使用reduce,您可以使用阵列计算所有内容:

var countBoard1 = board.reduce(0, { $0 + $1.reduce(0, {$0 + (!$1 ? 1 : 0) })})
print(countBoard1)
我短缩最后一个reduce以过滤它,然后我计算它:

var countBoard2 = board.reduce(0, { $0 + $1.filter{!$0}.count})
print(countBoard2)
因为每个数组元素的计数相等,所以我可以在没有子数组的情况下将数组展平为一个数组。然后我只过滤
false
,并计算此结果:

var countBoard3 = board.flatMap{$0}.filter{!$0}.count
print(countBoard3)
计数结果:

[[false, true, true, false], [true, false, true, false], [true, true, false, false], [false, false, false, false]]
10
10
10

用计算错误值的尝试更新您的问题。@rmaddy我添加我的尝试
board.forEach{$0.forEach{count+=!$0?1:0}
[[false, true, true, false], [true, false, true, false], [true, true, false, false], [false, false, false, false]]
10
10
10