按另一个数组的顺序对数组进行排序

Geo*_*ery 3 julia

我有

a = ["B", "C", "A"]
Run Code Online (Sandbox Code Playgroud)

b = [7, 10, 5]
Run Code Online (Sandbox Code Playgroud)

如何a按元素的顺序排序b

因此,解释一下,中元素的顺序b是已排序元素的索引 ( [3,1,2])。我想用它来做到这一点:

a[[3,1,2]]
["A", "B", "C"]
Run Code Online (Sandbox Code Playgroud)

ffe*_*tte 6

您正在寻找sortperm

sortperm(v; alg::Algorithm=DEFAULT_UNSTABLE, lt=isless, by=identity, rev::Bool=false, order::Ordering=Forward)

返回一个置换矢量I这使v[I]按排序顺序。使用与 相同的关键字指定顺序sort!。即使排序算法不稳定,置换也能保证稳定,这意味着相等元素的索引以升序出现。

应用于您的示例:

julia> a = ["B", "C", "A"]
3-element Array{String,1}:
 "B"
 "C"
 "A"

julia> b = [7, 10, 5]
3-element Array{Int64,1}:
  7
 10
  5

julia> perm = sortperm(b)
3-element Array{Int64,1}:
 3
 1
 2

julia> a[perm]
3-element Array{String,1}:
 "A"
 "B"
 "C"
Run Code Online (Sandbox Code Playgroud)