Julia 1.7.3中如何初始化元素为列向量的二维矩阵
报错原因
你写的Array{Vector{Char}}( [ c for c = '1' : '9' ], 9, 9 )触发MethodError,是因为Array构造函数没有匹配「传入一个向量实例+两个整数维度参数」的调用方法:
- 当你用
Array{T}(undef, dims...)语法时,第一个参数必须是undef标记,作用是申请对应尺寸的内存空间,不做初始化赋值 Array构造函数本身不支持直接传入一个示例值、自动把所有位置填充为该值的逻辑
另外有个极易踩的坑:如果所有矩阵元素都指向同一个Vector{Char}实例,后续修改任意一个位置的向量,其余80个位置的内容都会同步变化,完全不符合你要单独修改每个元素的需求,所有填充逻辑必须保证每个位置的向量是独立副本。
正确实现代码
# 第一步:初始化9×9、元素类型为Vector{Char}的未定义矩阵 matrix = Array{Vector{Char}}(undef, 9, 9) # 第二步:遍历所有矩阵位置,为每个位置赋值独立的1-9字符向量 for idx in eachindex(matrix) matrix[idx] = [c for c in '1':'9'] end
可以运行以下测试代码验证效果:
# 检查矩阵类型和尺寸 println(typeof(matrix)) # 输出 Matrix{Vector{Char}} (即Array{Vector{Char}, 2}) println(size(matrix)) # 输出 (9, 9) # 验证单个位置修改不会影响其他元素 matrix[1,1][1] = 'x' println(matrix[1,1]) # 输出 ['x', '2', '3', '4', '5', '6', '7', '8', '9'] println(matrix[1,2]) # 输出 ['1', '2', '3', '4', '5', '6', '7', '8', '9'],未被改动
避坑提醒
不要使用fill([c for c in '1':'9'], 9, 9)这类写法实现需求,fill函数会把你传入的同一个向量实例填充到所有矩阵位置,会引发非预期的联动修改:
bad_matrix = fill([c for c in '1':'9'], 9, 9) bad_matrix[1,1][1] = 'x' println(bad_matrix[3,2][1]) # 输出'x',和(1,1)位置无关的向量被意外修改
内容的提问来源于stack exchange,提问作者user3134725
相关产品推荐
相关产品推荐

