Сортировать массив по порядку другого массива - PullRequest
2 голосов
/ 16 апреля 2020

У меня есть

a = ["B", "C", "A"]

и

b = [7, 10, 5]

Как мне отсортировать a по порядку элементов b?

Итак, поясним, что порядок элементов в b - это индексы отсортированных элементов ([3,1,2]). Я хотел бы использовать это для этого:

a[[3,1,2]]
["A", "B", "C"]

1 Ответ

4 голосов
/ 16 апреля 2020

Вы ищете 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"
...