如何根据其中一个数组的值有效地排序两个数组?



如果我有两个数组

a = [  1,   4,   3,   2]
b = ['z', 'w', 'x', 'y']

,我想根据a的值对ab进行排序,即:

[  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'

最新更新