如何获取对 Vec 进行排序的索引?

Mic*_*all 12 sorting rust

我想获得在 Rust 中对 a 进行排序的索引Vec。实际上,我想argsort()从 numpy.

例如:

let v = vec![1, 7, 4, 2];
let i = argsort(&v);
assert_eq!(i, &[0, 3, 2, 1]);
Run Code Online (Sandbox Code Playgroud)

kmd*_*eko 26

不确定是否有为此预先制作的东西,但它足够简单,可以自己实现.sort_by_key()

pub fn argsort<T: Ord>(data: &[T]) -> Vec<usize> {
    let mut indices = (0..data.len()).collect::<Vec<_>>();
    indices.sort_by_key(|&i| &data[i]);
    indices
}
Run Code Online (Sandbox Code Playgroud)

看到它在操场上工作。

  • @Katya Floats 没有总订单。您需要 `sort_by_key` 来返回包装类型或使用 [`sort_by()`](https://doc.rust-lang.org/std/primitive.slice.html#method.sort_by) 和一个函数,该函数可以处理比较“NaN”。请参阅[此处](/sf/ask/1977359331/)或[此处](/sf/ask/2828580541/)的答案以获取想法。 (4认同)
  • 那么对于浮点数向量呢? (3认同)