我希望这段代码尽可能快地运行。遍历对象列表并更改其字段或使用它们计算某些变量的最有效方法是什么?
这是我的代码:
mutable struct typeA
a::Float64
end
mutable struct typeB
b::Float64
end
mutable struct typeC
c::Float64
end
types = Union{typeA, typeB, typeC}
function change(n::Int64, list::Array{types, 1})
for i = 1:n
j = rand(1:3)
chosen = list[j]
u = rand()
if typeof(chosen) == typeA
if u < chosen.a
chosen.a = u
end
elseif typeof(chosen) == typeB
if u < chosen.b
chosen.b = u
end
elseif typeof(chosen) == typeC
if u > chosen.c
chosen.c = u
end
end
end
list
end
list = Union{types}[typeA(0.7), typeB(0.5), typeC(0.9)]
@time change(10000, list)
结果如下:
0.072776秒(85.81 k分配:4.694 MiB)
并第二次:
0.001378秒(4个分配:160字节)
最佳答案
我知道您想加快内循环部分的速度(不更改一般逻辑)。如果是这种情况,则在typeof(chosen) == typeA
和typeof(chosen) === typeA
子句中将chosen isa typeA
更改为typeB
或typeC
(对于if
和elseif
相同),您应该看到3倍的加速。
关于optimization - 如何有效地遍历julia中的对象列表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58486448/