julia - 如何声明派生类型的数组? ( Julia )

标签 julia

我有一个派生类型:

struct BoundaryCondition
  domain::MeshStructure
  left::BorderValue
  right::BorderValue
  bottom::BorderValue
  top::BorderValue
  back::BorderValue
  front::BorderValue
end

我想创建一个这种派生类型的数组,大小为 n_comp,在我的代码中为:

bc = Array{BoundaryCondition}(n_comp)
for i in 1:n_comp
  bc[i] = createBC(m)
  bc[i].left.a[:] = 0.0
  bc[i].left.b[:] = 1.0
  bc[i].left.c[:] = c_left[i]
end

但是我收到一个错误:

ERROR: LoadError: MethodError: no method matching (Array{BoundaryCondition, N} where N)(::Int64)

声明 BoundaryCondition 类型数组的正确方法是什么?

最佳答案

如果你想预分配它,你需要用一些东西填充你的数组。例如,您可以使用 undef(将 Bool 类型和大小替换为您的问题):

julia> Vector{Bool}(undef, 3)
3-element Vector{Bool}:
 1
 0
 0

您还可以使用 fill(同样,将 false 替换为问题的默认“fill”值):

julia> fill(false, 3)
3-element Vector{Bool}:
 0
 0
 0

如果您不需要预分配,一个好的解决方案是理解。为创建边界条件创建索引函数,例如:

function my_BC(i)
    out = createBC(m)
    out.left.a[:] = 0.0
    out.left.b[:] = 1.0
    out.left.c[:] = c_left[i]
    return out
end

然后简单地做

[my_BC(i) for i in 1:n_comp]

关于julia - 如何声明派生类型的数组? ( Julia ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67513000/

相关文章:

python - PyCall 在 Julia 中找不到 scipy

arrays - 在 Julia 中按多个键对 Dict 数组进行排序

statistics - 为什么 Julia Distribution 包不能使用整数?

julia - 如何在 julia/examples 中运行 plife.jl?

matrix - 如何从向量制作对角矩阵

julia - 如何使用 Julia 安装可移植包?

arrays - 并行数据处理

julia - 如何将异构数组 (Array{Any}) 提升为具有单一公共(public)类型元素的同构数组?

linked-list - Julia 中的双链表

upgrade - 如何将 Julia 升级到 v0.5.0?