I had the same issue, but I needed to break ties and didn’t want to use DataFrames. Here is a suggestion (the default behavior is like Matlab’s, otherwise one can specify a matrix of elements to sort on):
function sortrows(M, by=zeros(0))
if by == zeros(0)
order = copy(M)
else
order = copy(by)
end
if size(order,2) > 1
order = Float64.(order.-minimum(order, dims = 1))
order = (order./maximum(order,dims=1))*(10).^(size(order,2):-1:1)
end
order = sortperm(order[:,1])
return M[order,:], order
end
A = [4 1 1; 3 2 5;2 4 3]'
sorted_A, order = sortrows(A,A[:,[1,3]])
julia> sorted_A
3×3 Array{Int64,2}:
1 5 3
1 2 4
4 3 2