目前推荐的对向量进行排序的方法是什么?
v
进行排序,在大多数情况下你需要使用v.sort()
。v.sort_by()
来实现。这包括以下情况:
此外,请注意 sort()
和 sort_by()
使用稳定的排序算法(即,相等的元素不会被重新排序)。如果不需要稳定排序,则可以使用sort_unstable()
/sort_unstable_by()
,因为这些方法通常比较快且使用的内存更少。虽然上面提出的解决方案可以对整数向量进行排序,但我在对浮点数向量进行排序时遇到了问题。
最简单的解决方案是使用 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.sort_by(|a, b| a.partial_cmp(b).unwrap_or(Ordering::Equal))
可以用于浮点数的排序。(取决于你想在数组中处理 NaN 的方式,你可以编写更谨慎的比较函数。) - user4815162342
sort_by
方法,它允许完全自定义的谓词。 - huonself.sort()
等同于self.sort_by(|a, b| a.cmp(b))
。 - Chris MorganT
实现了cmp::Ord
特性,您可以直接调用.sort()
。 - Simon Zyxsort_unstable
,它会更快一些,但可能会重新排列“相等”的元素。 - Bogdan Mart