How to sort a vector in Rust?
目前推荐的对向量中的值进行排序的方法是什么?
可变元素的总顺序为sort。
因为Vec< T >实现了DerefMut<[T]>,所以可以直接在向量上调用此方法,因此vector.sort()可以工作。
-
T型有什么要求?我收到一个错误消息,提示" Vec 在名为sort的范围内未实现任何方法"。我怀疑这可能是因为我没有实现MyType的某些特征,到目前为止,我有cmp :: PartialEq和cmp :: PartialOrd。
-
也有sort_by方法,它允许完全自定义的谓词。
-
@ChrisMorgan太棒了,这有效,谢谢!
-
正如文档所说,self.sort() == self.sort_by(|a, b| a.cmp(b))。
-
如果类型T实现了cmp::Ord特征,则可以仅调用.sort()。
-
您还可以更快地查看sort_unstable,但可以对"相等"元素进行重新排序
虽然上面提出的解决方案可以对整数向量进行排序,但我在对浮点向量进行排序时遇到了问题。
最简单的解决方案是使用quickersort板条箱,该板条箱也可以对浮标进行排序。
quickersort板条箱还可以对其他任何类型的向量进行排序,还可以实现使用比较进行排序的方法(sort_by)。
以下是Rust代码:
1 2 3 4 5 6 7 8 9
| 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进行处理,可以编写更仔细的比较函数。)
-
我在对浮点向量进行排序时遇到了问题-这就是为什么已经存在针对该特定问题的完整问题和解答(stackoverflow.com/q/26489701/155423、stackoverflow.com/q/28247990/155423、stackoverflow.com/q/ 37127209/155423)。