如何根据haskell中另一个向量的排序顺序重新排序矢量值?

daj*_*daj 2 sorting haskell vector

假设我有两个向量:

  let x = V.fromList ["foo", "bar", "baz"]
  let y = V.fromList [1,3,2]
Run Code Online (Sandbox Code Playgroud)

我想定义一个向量y'这是排序的版本y,但我也想定义的重新排序x'是基于的排序顺序进行排序y(x'应该是这样["foo", "baz", "bar"]).

这样做的最佳功能是什么?理想情况下,我想避免从头开始编写排序函数.

Eri*_*ikR 5

我想你在找 backpermute

backpermute :: Vector a -> Vector Int -> Vector a
Run Code Online (Sandbox Code Playgroud)

O(n)产生通过用i索引向量替换每个元素而获得的向量xs!i.这相当于map (xs!)但通常效率更高.