Julia中嵌套数组映射到NamedArray转换语法报错如何解决
报错根源
- 语法错误:
replace(em[i][3j-1]) = "Stt"写法不符合Julia语法规则,replace()是调用函数,不能放在等号左侧作为赋值的左值,这是触发你当前语法报错的直接原因。 - 逻辑冗余:你直接操作字符串格式的
em数组,通过3j-1取字符定位数字的方式容错率极低,只要字符串的空格、括号格式有变化就会完全失效,直接用数值类型的el数组处理逻辑更简单稳定。 - 分支错误:
else em[i][3j-1] == '4'写法错误,else后不能附加判断条件,需要加判断应该用elseif。
实现方案
建议直接用数值嵌套数组el做转换,不用处理字符串解析,实现代码如下:
function trans(el::Vector{Vector{Int}}, OrderNA) # 初始化结果数组,长度和el一致 res = Vector{Vector{String}}(undef, length(el)) # 步数对应OrderNA的列索引:第一列是行名,所以Start(0步)对应第2列,Finish(4步)对应第6列 step_col_map = [2,3,4,5,6] for idx in eachindex(el) step_group = el[idx] # 按分组顺序映射对应值 res[idx] = [OrderNA[group_idx, step_col_map[step+1]] for (group_idx, step) in enumerate(step_group)] end return res end
如果必须处理字符串格式的em数组,只需要加一步字符串转数值的逻辑即可:
function trans(em::Vector{String}, OrderNA) res = Vector{Vector{String}}(undef, length(em)) step_col_map = [2,3,4,5,6] for idx in eachindex(em) # 解析字符串为整数数组,比如"[1,2,4]" 转为 [1,2,4] step_group = parse.(Int, split(strip(em[idx], ['[', ']']), ", ")) res[idx] = [OrderNA[group_idx, step_col_map[step+1]] for (group_idx, step) in enumerate(step_group)] end return res end
效果验证
和你给出的转换示例完全匹配:
- 输入
[0,0,0]输出["Stt","Stt","Stt"] - 输入
[1,0,0]输出["W1", "Stt", "Stt"] - 输入
[1,2,4]输出["W1", "W3", "Fin" ]
内容的提问来源于stack exchange,提问作者Yon J
相关产品推荐
相关产品推荐

