如何在Rust中对向量排序?


Answers:


88

具有总排序的可变元素片具有一种sort方法。

因为Vec<T>实现了DerefMut<[T]>,您可以直接在向量上调用此方法,所以vector.sort()可以工作。


T型有什么要求?我收到一条错误消息,提示“ Vec <MyType>在名为'sort'的范围内未实现任何方法”。我怀疑这可能是因为我没有实现MyType的某些特征,到目前为止,我有cmp :: PartialEq和cmp :: PartialOrd。
Maxim Sloyko 2014年

9
也有sort_by允许完全自定义谓词的方法。
休2014年

9
正如文档所说,self.sort()== self.sort_by(|a, b| a.cmp(b))
克里斯·摩根

1
.sort()如果类型T实现了cmp::Ord特征,则可以调用。
Simon Zyx

1
您也可以看一下sort_unstable它的速度,但可以重新排序“相等”的元素
Bogdan Mart

1

尽管上面提出的解决方案可以对整数向量进行排序,但我在对浮点向量进行排序时遇到了问题。

最简单的解决方案是使用quickersort板条箱,它也可以对浮点数进行排序。quickersort板条箱还可以对其他任何类型的向量进行排序,还可以实现使用比较进行排序的方法(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

11
您不应该只需要单独的板条箱就可以对浮点数进行排序-例如,v.sort_by(|a, b| a.partial_cmp(b).unwrap_or(Ordering::Equal))应该与浮点数一起使用。(取决于要对数组中的NaN进行的操作,可以编写更仔细的比较函数。)
user4815162342

4
我在整理花车的载体问题-这就是为什么有已经全部问题和答案专门针对该特定问题(stackoverflow.com/q/26489701/155423stackoverflow.com/q/28247990/155423stackoverflow.com/q/ 37127209/155423)。
Shepmaster
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.