Julia 用户定义结构上的for循环问题
我将结构定义为:Julia 用户定义结构上的for循环问题,julia,Julia,我将结构定义为: struct CLocation{T<:Real} x::Array{T,1} y::Array{T,1} z::Array{T,1} end struct CSize{T<:Real} x::Array{T,1} y::Array{T,1} z::Array{T,1} end struct FLocation{T<:Real} x::Array{T,1} y::Array{T,1} z::Array{T,1} end
struct CLocation{T<:Real}
x::Array{T,1}
y::Array{T,1}
z::Array{T,1}
end
struct CSize{T<:Real}
x::Array{T,1}
y::Array{T,1}
z::Array{T,1}
end
struct FLocation{T<:Real}
x::Array{T,1}
y::Array{T,1}
z::Array{T,1}
end
struct MStructure
dimension::Real
dims::Array{Int,1}
csize::CSize
ccenters::CLocation
fcenters::FLocation
corner::Array{Int,1}
edge::Array{Int,1}
end
struct CValue # {T<:Real}
domain::MStructure
value::Union{Array{<:Real}, DenseArray{Bool}} #Union{Array{T}, BitArray{}}
end
其中我已将val
初始化为0
有没有更简洁的方法来执行这个循环?最好采用以下格式:val=[val+vec[i]表示1:N中的i]
它返回类型为Cvalue
的向量,而我的意图是val只是类型为Cvalue
我尝试了
val=(val+vec[I]代表1:N中的I)
,但没有成功。在Julia 1.6和更高版本中,您可以使用sum(vec;init=val)
。
在旧版本中,如果+
是非关联的,则可以使用reduce(+,vec;init=val)
或foldl(+,vec;init=val)
如果希望保持枚举,则可以执行类似于foldl((acc,i)->vec[i]+acc,1:length(vec);init=val)
或等效的操作
foldl(1:length(vec); init = val) do acc, i
acc + vec[i]
end
function calc_sum(N,vec,val)
for i in 1:N
val = val + vec[i]
end
return val
end
foldl(1:length(vec); init = val) do acc, i
acc + vec[i]
end