¿Cuáles son los requisitos para el tipo T? Recibo un error que dice "Vec <MyType> no implementa ningún método en el alcance llamado 'sort'". Sospecho que esto puede deberse a que no implementé algunos rasgos para MyType, tengo cmp :: PartialEq y cmp :: PartialOrd hasta ahora.
Maxim Sloyko
9
También existe el sort_bymétodo que permite un predicado completamente personalizado.
huon
9
Como dicen los documentos, self.sort()== self.sort_by(|a, b| a.cmp(b)).
Chris Morgan
1
Puede simplemente llamar .sort()si el tipo Timplementa el cmp::Ordrasgo.
Simon Zyx
1
También puede echarle un vistazo a sort_unstableque es un poco más rápido, pero podría reordenar elementos "iguales"
Bogdan Mart
1
Si bien las soluciones propuestas anteriormente pueden ordenar vectores de números enteros, tuve problemas para ordenar vectores de flotantes.
La solución más simple fue utilizar la caja quickersort , que también puede clasificar flotadores. La caja de clasificación rápida también puede clasificar otros vectores de cualquier tipo y también implementa métodos para clasificar mediante comparaciones (sort_by).
A continuación se muestra el código de Rust:
externcrate quickersort;
//let's create the vector with the valuesletmut 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
No debería necesitar una caja separada solo para clasificar los flotadores; por ejemplo, v.sort_by(|a, b| a.partial_cmp(b).unwrap_or(Ordering::Equal))debería funcionar con flotadores. (Dependiendo de lo que desee hacer con los NaN en la matriz, puede escribir una función de comparación más cuidadosa).
sort_by
método que permite un predicado completamente personalizado.self.sort()
==self.sort_by(|a, b| a.cmp(b))
..sort()
si el tipoT
implementa elcmp::Ord
rasgo.sort_unstable
que es un poco más rápido, pero podría reordenar elementos "iguales"Si bien las soluciones propuestas anteriormente pueden ordenar vectores de números enteros, tuve problemas para ordenar vectores de flotantes.
La solución más simple fue utilizar la caja quickersort , que también puede clasificar flotadores. La caja de clasificación rápida también puede clasificar otros vectores de cualquier tipo y también implementa métodos para clasificar mediante comparaciones (sort_by).
A continuación se muestra el código de 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
fuente
v.sort_by(|a, b| a.partial_cmp(b).unwrap_or(Ordering::Equal))
debería funcionar con flotadores. (Dependiendo de lo que desee hacer con los NaN en la matriz, puede escribir una función de comparación más cuidadosa).