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
为您的问题的默认“填充”值):
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]
推荐阅读
- rest - Can I use DELETE to update a flag indicating that this element is deleted?
- mapbox - mapbox: GeolocateControl 与 NavigationControl 分组
- macos - 在 High Sierra 上通过 AppleScript 设置 Finder 标签
- codenameone - CodenameOne 调用 Start() 方法使应用程序崩溃
- list - 列表的成员,总结以前的成员列表序言
- arrays - R中的数组列表排序
- javascript - 嵌套数据中的 D3 v4 更新,最好的方法
- neo4j - 在 Neo4j 的 Dijkstra 算法中使用多次属性
- angularjs - 无法在 angularjs 控制器中注入 $uibModal?
- javascript - 视差背景图像似乎被剪切了