我试图这样做:
$var = 0 #This stay inside a JSON Object
newVar = []
n.times do |i|
newVar.push(randomize($var))
end
def randomize(thisVar)
thisVar = Random.new.rand(0 .. 100)
return thisVar
end
但是我总是在数组newVar[]
我已经尝试过.dup和.clone不给所有字段赋予相同的值。但它不起作用。
真实代码:
# IdeenAG: Operacoes Geneticas
def novaPopulacao ()
puts "\n\nIdeenAG: Criando Populacao ("+$parametros['populacaoInicial']+")\n"
tempVar = []
populacaoCriada = []
xtimes = $parametros['populacaoInicial'].to_i
xtimes.times do |i|
populacaoCriada.push(mutar($variaveis.clone))
end
puts populacaoCriada.to_s+"\n"
return populacaoCriada
end
def mutar (varArray)
varArray.each_with_index do |variavel,index|
puts "IdeenAG: Mutando População ("+variavel['nome']+")\n"
variavel['valor'] = Random.new.rand(variavel['minimo'].to_i .. variavel['maximo'].to_i)
end
return varArray
end
实际结果(有3个Vars)
[[
{"nome"=>"var0", "minimo"=>"1", "maximo"=>"99999", "valor"=>70356},
{"nome"=>"var1", "minimo"=>"1", "maximo"=>"99999", "valor"=>55356},
{"nome"=>"var2", "minimo"=>"1", "maximo"=>"99999", "valor"=>65904}
],
[
{"nome"=>"var0", "minimo"=>"1", "maximo"=>"99999", "valor"=>70356},
{"nome"=>"var1", "minimo"=>"1", "maximo"=>"99999", "valor"=>55356},
{"nome"=>"var2", "minimo"=>"1", "maximo"=>"99999", "valor"=>65904}
],
[
{"nome"=>"var0", "minimo"=>"1", "maximo"=>"99999", "valor"=>70356},
{"nome"=>"var1", "minimo"=>"1", "maximo"=>"99999", "valor"=>55356},
{"nome"=>"var2", "minimo"=>"1", "maximo"=>"99999", "valor"=>65904}
],
[
{"nome"=>"var0", "minimo"=>"1", "maximo"=>"99999", "valor"=>70356},
{"nome"=>"var1", "minimo"=>"1", "maximo"=>"99999", "valor"=>55356},
{"nome"=>"var2", "minimo"=>"1", "maximo"=>"99999", "valor"=>65904}
],
[
{"nome"=>"var0", "minimo"=>"1", "maximo"=>"99999", "valor"=>70356},
{"nome"=>"var1", "minimo"=>"1", "maximo"=>"99999", "valor"=>55356},
{"nome"=>"var2", "minimo"=>"1", "maximo"=>"99999", "valor"=>65904}
]]
见“valor”字段,它始终是相同的值!我需要随机化它。
答案 0 :(得分:1)
要纠正您的第一段代码,您在寻找:
$var = 0 #This stay inside a JSON Object
newVar = []
n.times do |i|
newVar.push(randomize)
end
def randomize
thisVar = Random.new.rand(0 .. 100)
return thisVar
end
这会将newVar
设置为0到100之间的随机数组。数组的长度为n
。
答案 1 :(得分:1)
dup
和clone
都只制作浅层复制品,这意味着它们只复制顶级结构。一个典型的json深深嵌套。
一个例子。首先没有副本:
h1 = {a:"a", b:1}
h2 = h1
h1[:a] = "aa"
h2[:a]
这会返回“aa”,因为h1和h2是同一个对象。
现在有了重复
h1 = {a:"a", b:"b"}
h2 = h1.dup
h1[:a] = "aa"
h2[:a]
# returns "a", everything looks good
h1[:b].upcase!
h2[:b]
# returns "B" :-(
h2哈希是新的,但是包含指向旧对象的指针。如果您在适当的位置编辑这些对象,h2也会进行这些编辑。
那么如何解决这个问题呢?通常,您只需从头开始创建jsons对象。您也可以制作一份深层副本,例如在这里查看这个问题: