首页 > 解决方案 > 在 Julia 中初始化锯齿状数组

问题描述

我是朱莉娅的新手。我正在尝试在第一维中初始化一个已知大小为 K 的锯齿状数组,在第二维中初始化一个未知大小。

我目前这样做的方式是

arr = Array{Array{Int}}(undef, K)
for i in 1:K
    arr[i] = []
end
# and then push! elements to arr[k] if the element is in category k.

我们能以更好的方式做到这一点吗?

标签: julia

解决方案


我认为最简单的写法是:

arr = [Int[] for _ in 1:K]

你也可以写(我将这些作为练习展示,因为我通常会使用理解):

arr = map(_ -> Int[], 1:K)

或者

arr = (_ -> Int[]).(1:K)

一个应该避免的常见错误是:

arr = fill(Int[], K)

因为那么每个元素arr都是完全相同的向量,这是您不想要的。例如

julia> arr = fill(Int[], K)
5-element Array{Array{Int64,1},1}:
 []
 []
 []
 []
 []

julia> push!(arr[1], 1)
1-element Array{Int64,1}:
 1

julia> arr
5-element Array{Array{Int64,1},1}:
 [1]
 [1]
 [1]
 [1]
 [1]

推荐阅读