Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.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 替换数组的数组中元素的位置_Arrays_Swift_For Loop - Fatal编程技术网

Arrays 替换数组的数组中元素的位置

Arrays 替换数组的数组中元素的位置,arrays,swift,for-loop,Arrays,Swift,For Loop,我一直试图运行这个循环来更改基于数组的元素的位置,但是我得到了下面的错误。我不确定会出什么问题。任何想法或想法!!谢谢 错误消息的原因:循环中的单个对象是不可变的,它是对象的副本,而不是引用 您可以使用enumerate执行类似的操作: for (index, individual) in enumerate(population) { var mutate = 0.01 if mutate > Double(Float(arc4random()) / Float(UI

我一直试图运行这个循环来更改基于数组的元素的位置,但是我得到了下面的错误。我不确定会出什么问题。任何想法或想法!!谢谢


错误消息的原因:循环中的
单个
对象是不可变的,它是对象的副本,而不是引用

您可以使用
enumerate
执行类似的操作:

for (index, individual) in enumerate(population) {
    var mutate = 0.01

    if mutate > Double(Float(arc4random()) / Float(UINT32_MAX)) {

        var positionToMutate = randomIntergerInRange(0, (individual.count - 1))

        var valueToAssign = randomIntergerInRange(minElement(individual), maxElement(individual))

        population[index][positionToMutate] = valueToAssign

        print(population[index])

    }
}
您不应该在迭代集合时修改它,顺便说一句,它可能会有副作用

Swift 2的更新

private func randomIntegerInRange(low:Int, _ high:Int) -> Int {
    let randomGeneratedNumber = low + Int(arc4random()) % (high - low)
    return Int(randomGeneratedNumber)
}

var mutate = 0.01
for (index, individual) in population.enumerate() {
    if mutate > Double(Float(arc4random()) / Float(UINT32_MAX)) {
        var positionToMutate = randomIntegerInRange(0, (individual.count - 1))
        if let min = individual.minElement(), max = individual.maxElement() {
            var valueToAssign = randomIntegerInRange(min, max)
            population[index][positionToMutate] = valueToAssign
            print(population[index])
        }
    }
}

数组是按值传递的,因此,当您在每次迭代中使用
individual
时,它会被分配一个
population
子数组的副本,即使您在population中使用
变量individual…
也只会变异原始数组的一个副本

如果要改变原始数组的值,可以使用索引,例如:

for index in population.indices {
    var mutate = 0.01

    if mutate > Double(Float(arc4random()) / Float(UINT32_MAX)) {

        var positionToMutate = randomIntergerInRange(0, (population[index].count - 1))

        var valueToAssign = randomIntergerInRange(minElement(population[index]), maxElement(population[index]))

        population[index][positionToMutate] = valueToAssign
        print(population[index])

    }
}

为什么您的数组看起来更像字典(这是一个数组数组@Lamar;)哦,我明白了。我不知道。非常感谢@伦佐(谢谢)。我不太确定的东西!。
for index in population.indices {
    var mutate = 0.01

    if mutate > Double(Float(arc4random()) / Float(UINT32_MAX)) {

        var positionToMutate = randomIntergerInRange(0, (population[index].count - 1))

        var valueToAssign = randomIntergerInRange(minElement(population[index]), maxElement(population[index]))

        population[index][positionToMutate] = valueToAssign
        print(population[index])

    }
}