Julia:sortslices:是否可以将排序逻辑作为变量而不是文字传递?
Julia: sortslices: is it possible to pass the sort logic as a variable rather than a literal?
unsorted = [3 5 9; 3 -6 11; 2 -4 8; 2 7 10]
sorted_1 = sortslices(unsorted, dims=1, by=x->(x[1],-abs(x[2])) )
按预期给出:
4×3 Array{Int64,2}:
2 7 10
2 -4 8
3 -6 11
3 5 9
我尝试将第三个参数放入一个变量中并传递给它:
unsorted = [3 5 9; 3 -6 11; 2 -4 8; 2 7 10]
sort_string = "by=x->(x[1],-abs(x[2]))"
sorted_2 = sortslices(output, dims=1, sort_string)
给出:
ERROR: LoadError: MethodError: no method matching sortslices(::Array{Float64,2}, ::String; dims=1)
Closest candidates are:
sortslices(::AbstractArray; dims, kws...) at multidimensional.jl:1751
是否有语法调整使这项工作有效,或者没有这样的解决方案?
(我尝试这样做的原因是我正在编码的排序逻辑取决于多个用户输入,其中一些不是二进制的。
我可以做嵌套的 ifs 来给出 2 * 3 * 4 组合,每个组合都有一个 sortslices 调用,但是将排序逻辑连接为一个字符串会更整洁,它只涉及 2+3+4 if 行)
P.S。我正在使用 Julia 1.5.3
您可以使用元编程:
julia> sort_string = "x->(x[1],-abs(x[2]))";
julia> sorted_2 = sortslices(unsorted, dims=1, by=Meta.eval(Meta.parse(sort_string)))
4×3 Matrix{Int64}:
2 7 10
2 -4 8
3 -6 11
3 5 9
unsorted = [3 5 9; 3 -6 11; 2 -4 8; 2 7 10]
sorted_1 = sortslices(unsorted, dims=1, by=x->(x[1],-abs(x[2])) )
按预期给出:
4×3 Array{Int64,2}:
2 7 10
2 -4 8
3 -6 11
3 5 9
我尝试将第三个参数放入一个变量中并传递给它:
unsorted = [3 5 9; 3 -6 11; 2 -4 8; 2 7 10]
sort_string = "by=x->(x[1],-abs(x[2]))"
sorted_2 = sortslices(output, dims=1, sort_string)
给出:
ERROR: LoadError: MethodError: no method matching sortslices(::Array{Float64,2}, ::String; dims=1)
Closest candidates are:
sortslices(::AbstractArray; dims, kws...) at multidimensional.jl:1751
是否有语法调整使这项工作有效,或者没有这样的解决方案?
(我尝试这样做的原因是我正在编码的排序逻辑取决于多个用户输入,其中一些不是二进制的。 我可以做嵌套的 ifs 来给出 2 * 3 * 4 组合,每个组合都有一个 sortslices 调用,但是将排序逻辑连接为一个字符串会更整洁,它只涉及 2+3+4 if 行)
P.S。我正在使用 Julia 1.5.3
您可以使用元编程:
julia> sort_string = "x->(x[1],-abs(x[2]))";
julia> sorted_2 = sortslices(unsorted, dims=1, by=Meta.eval(Meta.parse(sort_string)))
4×3 Matrix{Int64}:
2 7 10
2 -4 8
3 -6 11
3 5 9