如何将值放入结构的子记录中?

时间:2019-05-19 11:06:56

标签: julia

如果需要在Julia的子结构中放置一个值,怎么可能? 例如,我有这种结构

struct individual
    position
    cost
end

pop = [individual(rand(0:1,10),[]) for i in 1:2]

如果代码中的位置将更改为该值x=[0, 2, 0, 0, 2, 0, 0, 2, 2, 2]

怎么可能?

如果使用append!()

append!(pop[1].position,x)


individual([1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 2, 0, 0, 2, 0, 0, 2, 2, 2], Any[])

但是我想要这个

individual([0, 2, 0, 0, 2, 0, 0, 2, 2, 2], Any[])

请你帮我一下。非常感谢

1 个答案:

答案 0 :(得分:2)

在添加x之前先清空容器,如下所示:

append!(empty!(pop[1].position), x)

或将individual定义为可变的,然后您可以像这样简单地使用赋值:

julia> mutable struct individual
           position
           cost
       end

julia> pop = [individual(rand(0:1,10),[]) for i in 1:2]
2-element Array{individual,1}:
 individual([1, 1, 1, 1, 0, 0, 0, 0, 0, 1], Any[])
 individual([0, 0, 0, 1, 0, 1, 1, 1, 1, 1], Any[])

julia> x=[0, 2, 0, 0, 2, 0, 0, 2, 2, 2]
10-element Array{Int64,1}:
 0
 2
 0
 0
 2
 0
 0
 2
 2
 2

julia> pop[1].position = x
10-element Array{Int64,1}:
 0
 2
 0
 0
 2
 0
 0
 2
 2
 2

julia> pop
2-element Array{individual,1}:
 individual([0, 2, 0, 0, 2, 0, 0, 2, 2, 2], Any[])
 individual([0, 0, 0, 1, 0, 1, 1, 1, 1, 1], Any[])