Xcode 使用带有数组的for语句查找下一个true

Xcode 使用带有数组的for语句查找下一个true,xcode,if-statement,for-loop,swift,Xcode,If Statement,For Loop,Swift,我试着用下面的代码找出最大的错误数字;但是,如果一个真变量出现在最大值之前,我希望它给出该值以下的值。如何更改代码以实现这一点 var firstRow = [1: false, 2: false, 3: false, 4: false, 5: true, 6: false] var smallest = Int.max var largest = 0 var playerLoc = "3" for (number, bool) in firstRow { if playerLoc != "1

我试着用下面的代码找出最大的错误数字;但是,如果一个真变量出现在最大值之前,我希望它给出该值以下的值。如何更改代码以实现这一点

var firstRow = [1: false, 2: false, 3: false, 4: false, 5: true, 6: false]
var smallest = Int.max
var largest = 0
var playerLoc = "3"

for (number, bool) in firstRow {
if playerLoc != "1" && playerLoc != "30"{
    if bool == false && number < smallest {
        smallest = number
        var smallString = ("\(smallest)")
        if smallString == playerLoc {
            smallest = Int.max

        }
        else {
            smallest = number

        }
    }
}
else {
    smallest = Int.max
}
if playerLoc != "6" && playerLoc != "36" {

    if bool == false && number > largest {
        largest = number
    }
}
else {
    largest = 0
}

}
println(smallest)
println(largest)
然而,如果我在操场上使用它,它工作得很好

我已经把问题缩小到这个代码

if two.contains(player.position) || two.contains(opponent.position) ||     two.contains(block3.position) {
    firstRow[2].1 = true
} else {
    firstRow[2].1 = false
}

如果顺序很重要,那么应该使用数组而不是字典

var firstRow = [(1, false), (2, false), (3, false), (4, false), (5, true), (6, false)]
然后可以像这样迭代:

for var i = 0; i < firstRow.count; ++i){
    if (firstRow[i].1){
        if (i == 0){
            // handle this condition
        } else {
            smallest = firstRow[i-1].0
            break
        }
    }
}

我想出来了。当我切换到数组时,它从0开始,而不是从1开始,因此如果我调用6,它会给出错误。所以我必须从0开始,然后到5。

你知道字典是无序的集合吗?所以第一行中的项目不一定会按那个顺序迭代,我不知道。你会推荐什么呢?元组数组可能是:var a=arrayWhat格式的int和bools?只需逗号?发布循环和任何访问数组的代码。事实上,我发现,如果一行中有两个true,它将同时返回这两个true。当它返回第一个元素时,我希望它停止。当我使用如您所示的数组时,我得到一个数组索引超出范围错误。如果第一个项目为true,则尝试访问索引[-1]处的元素时将得到一个错误。我再次编辑了答案
for var i = 0; i < firstRow.count; ++i){
    if (firstRow[i].1){
        if (i == 0){
            // handle this condition
        } else {
            smallest = firstRow[i-1].0
            break
        }
    }
}