所以我试图循环一个数组并根据数组中的索引增加两个计数器。数组中包含布尔值,计数器用于所述布尔值。我的实现是错误填充的,所以我试图弄清楚我的逻辑是不正确的还是我的实现是不正确的。所以额外的一双眼睛会帮助
var numTrue = 0
var numFalse = 0
var boolArray = [true, true, false, true]
for index in boolArray.enumerate() {
if index == false{
numFalse++
} else {
numTrue++
}
}
print("Count true: \(numTrue)")
print("Count false: \(numFalse)")
答案 0 :(得分:3)
像Unheilig写的enumarate正在返回sequenceType。
您还可以删除枚举调用,我认为这样可以使您的案例中的代码更具可读性:
var numTrue = 0
var numFalse = 0
var boolArray = [true, true, false, true]
for index in boolArray {
if index == false{
numFalse++
} else {
numTrue++
}
}
print("Count true: \(numTrue)")
print("Count false: \(numFalse)")
修改1:快速帮助文档
下一次如果您遇到类似的问题或错误弹出,您也可以使用快速帮助文档,方法是按住alt并将鼠标悬停在方法上,而不是出现问号,您可以单击该方法。将打开一个窗口,其中包含该方法的描述,有时还会出现类似于enumerate()的示例。请参见下面的屏幕截图:
编辑2:改进的解决方案
Swift在您的情况下为集合提供方法,以减少代码量。
在您的情况下,您可以使用方法filter(),它通过过滤掉调用它的数组中的元素来返回一个新数组。唯一的参数是一个闭包(更多关于闭包here),它返回一个布尔值,它将为数组中的每个元素执行一次这个闭包。
Swift自动为内联闭包提供简写参数名称,可用于通过名称$0, $1, $2
等来引用闭包参数的值(来自文档)。
因此,在您的情况下,$0
代表从索引0开始的每个元素。
count
返回数组中元素的数量,因此在您的情况下,使用filter
它只返回3,因为true出现3次。 trueCounter = 3
对于falseCounter
,您可以轻松地从boolArray.count
falseCounter = 4 - 3 -> 1
var boolArray = [true, true, false, true]
let trueCounter = boolArray.filter({$0 == true}).count
let falseCounter = boolArray.count - trueCounter
print("Count true: \(trueCounter)") // Count true: 3
print("Count false: \(falseCounter)") // Count false: 1
答案 1 :(得分:2)
代码无法编译,因为enumerate
正在以[{1}}格式向您返回SequenceType
。
将您的代码更改为以下内容:
(n, x)
输出:
var numTrue = 0
var numFalse = 0
let boolArray = [true, true, false, true]
//We are interested in value, ignoring the index
for (_, value) in boolArray.enumerate()
{
if value == false
{
numFalse++
}
else
{
numTrue++
}
}
答案 2 :(得分:1)
试试这个:
var numTrue = 0
var numFalse = 0
let boolArray = [true, true, false, true]
for index in boolArray {
if index {
numTrue += 1
} else {
numFalse += 1
}
}
print("Count true: \(numTrue)")
print("Count false: \(numFalse)")
答案 3 :(得分:1)
只是为了添加一些更好的香料,这里采用了不同的方法。
numTrue = boolArray.filter{ $0 }.count
numFalse = boolArray.count - numTrue
它确实具有不同的运行时特性(即在过滤器操作上创建一个新数组) - 所以我不建议无条件地使用它。