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