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)
PS 我正在使用 Julia 1.5.3
uj5u.com熱心網友回復:
您可以使用元編程:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/429752.html
