Julia中如何声明行长度可变的二维数组?现有实现报错如何解决?
现有代码的问题
- 语法错误:Julia 中访问数组元素需使用方括号
[],原代码中o.rows(i)的写法是将数组对象作为函数调用,直接触发 MethodError。 - 类型定义错误:普通 struct 在 Julia 中默认是不可变类型,实例创建后无法修改字段值,因此你无法直接给
In实例的cols字段赋值。
修复后的自定义实现
修改后的可运行代码如下:
# 声明为可变结构体才能修改字段 mutable struct In cols :: Vector{Int}; end struct Out nlen :: Int; rows :: Vector{In}; function Out(n) o = new(n, Vector{In}(undef,n)); for i in 1:n # 数组索引用方括号,先初始化In实例再赋值 o.rows[i] = In(Vector{Int}(undef,i)) end return o end end myarray = Out(5);
更简洁的原生锯齿数组实现
你原本的需求用 Julia 原生的Vector{Vector{Int}}就能直接实现,不需要额外定义结构体:
# 如果你需要的是每行长度为1~n的锯齿数组 n = 5 myarray = [Vector{Int}(undef, i) for i in 1:n] # 如果你需要匹配你给出的星号示例的行长度(分别为3、12、6、1、1、2) row_lengths = [3, 12, 6, 1, 1, 2] myarray = [Vector{Int}(undef, len) for len in row_lengths]
后续你可以直接通过myarray[行号][列号]的方式读写数组元素。
内容的提问来源于stack exchange,提问作者roy.atlas
相关产品推荐
相关产品推荐

