【问题标题】:Use for statement with array to find next true使用带有数组的 for 语句来查找下一个 true
【发布时间】:2014-06-10 21:52:29
【问题描述】:

我正在尝试使用下面的代码来找到不正确的最大数字;但是,如果一个真正的变量出现在最大数字之前,我希望它给我低于那个数字的数字。我怎样才能改变我的代码来完成这个?

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)

因此,例如,如果此代码正常工作,则将设置最大值等于 4,设置最小值等于 1 更新: 使用这行代码时,出现错误 Array Index Out of Range

var firstRow = [(1, false), (2, false), (3, false), (4, false), (5, false), (6, false)]

但是,如果我在操场上使用它,它就可以正常工作。

我已将问题缩小到此代码。

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

【问题讨论】:

  • 你知道字典是无序的集合吗?因此 firstRow 中的项目不一定会按该顺序迭代。
  • 我不知道。你会推荐什么?
  • 元组数组可能:var a = Array&lt;(Int, Bool)&gt;()
  • 那么我的 int 和 bools 的格式是什么?只是逗号?
  • 发布循环和任何访问数组的代码

标签: xcode if-statement for-loop swift


【解决方案1】:

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

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

【讨论】:

  • 实际上我发现如果连续有两个 true 它将返回两个。我希望它在返回第一个时停止
  • 当我使用你展示给我的数组时,出现数组索引超出范围错误
  • 如果第一项为真,则尝试访问索引 [-1] 处的元素时会出错。我再次编辑了答案
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2018-05-16
    • 1970-01-01
    • 2023-03-30
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多