如果我有两个数组
a = [ 1, 4, 3, 2]
b = ['z', 'w', 'x', 'y']
,我想根据a
的值对a
和b
进行排序,即:
[ 1, 2, 3, 4] # a
['z','y','x','w'] # b
做这件事的有效/习惯的方法是什么?
对于两个不同的向量,我不知道这是否可能。
我将使用sortperm,它返回一个排列向量p
,将a[p]
按排序顺序排列
julia> p=sortperm(a)
4-element Vector{Int64}:
1
4
3
2
julia> a[p]
4-element Vector{Int64}:
1
2
3
4
julia> b[p]
4-element Vector{Char}:
'z': ASCII/Unicode U+007A (category Ll: Letter, lowercase)
'y': ASCII/Unicode U+0079 (category Ll: Letter, lowercase)
'x': ASCII/Unicode U+0078 (category Ll: Letter, lowercase)
'w': ASCII/Unicode U+0077 (category Ll: Letter, lowercase)
如果性能很重要,你也可以使用sortperm!
,允许使用预分配的排列向量p
。
注意:如果你有一个矩阵你可以使用sortslices
julia> M=hcat(a,b)
4×2 Matrix{Any}:
1 'z'
4 'w'
3 'x'
2 'y'
julia> sortslices(M,dims=1,by=x->x[1])
4×2 Matrix{Any}:
1 'z'
2 'y'
3 'x'
4 'w'