簡體   English   中英

如何在 Rust 中對向量進行排序?

[英]How to sort a vector in Rust?

當前推薦的對向量中的值進行排序的方法是什么?

具有總排序的可變元素切片具有sort方法。

因為Vec<T>實現了DerefMut<[T]> ,你可以直接在一個向量上調用這個方法,所以vector.sort()可以工作。

雖然上面提出的解決方案可以對整數向量進行排序,但我在對浮點數向量進行排序時遇到了問題。

最簡單的解決方案是使用quickersort crate ,它也可以對浮點數進行排序。 quickersort crate 還可以對任何類型的其他向量進行排序,還可以實現使用比較(sort_by)進行排序的方法。

以下是 Rust 代碼:

extern crate quickersort;
//let's create the vector with the values
let mut vals = Vec::new();
vals.push(31.2);
vals.push(31.2);
vals.push(10.0);
vals.push(100.4);
vals.push(4.1);
quickersort::sort_floats(&mut vals[..]); // sort the vector

要對向量v排序,在大多數情況下v.sort()將是您所需要的。

如果要應用自定義排序規則,可以通過v.sort_by() 這包括您想要對以下值進行排序的情況:

  • 不要實現Ord (例如f64 ,大多數結構等);
  • 確實實施Ord ,但您想應用特定的非標准排序規則。

還要注意sort()sort_by()使用穩定的排序算法(即,不重新排序相等的元素)。 如果您不需要穩定的排序,您可以使用sort_unstable() / sort_unstable_by() ,因為它們通常更快一點並且使用更少的內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM