Julia中向数组推入元素:无法创建维度可变的内部数组
问题分析与解决方案
核心问题
你遇到的所有内部数组大小相同的问题,根源在于**edge_weights_array的初始化方式错误**:
edge_weights = Int[]; edge_weights_array = [edge_weights for _ in 1:199];
这里你只是把同一个空数组edge_weights的引用重复存入了数组199次,所有元素本质上指向同一个内存地址的数组。因此无论你通过哪个索引push!元素,都会修改同一个底层数组,最终所有内部数组的大小自然完全一致。
修正方案
将edge_weights_array的初始化代码改成:
edge_weights_array = [Int[] for _ in 1:199];
这样每次循环都会创建一个全新的空Int数组,数组中的每个元素都是独立的内存对象。后续通过zip遍历并push!(graph[2], w)时,只会修改当前对应的那个内部数组,实现每个子数组大小可变的需求。
补充说明
zip的用法没有问题,它正确关联了graph_array、edge_weights_array和graph_base_table_array中的对应元素。push!的用法也没有错误,问题完全出在数组初始化时的引用复用。
内容的提问来源于stack exchange,提问作者KeynesCoeFen
相关产品推荐
相关产品推荐

