Was sind die Anforderungen für den T-Typ? Ich erhalte die Fehlermeldung "Vec <MyType> implementiert keine Methode im Bereich 'sort'". Ich vermute, dass dies daran liegt, dass ich einige Merkmale für MyType nicht implementiert habe. Bisher habe ich cmp :: PartialEq und cmp :: PartialOrd.
Maxim Sloyko
9
Es gibt auch die sort_byMethode, die ein vollständig benutzerdefiniertes Prädikat ermöglicht.
Huon
9
Wie die Dokumente sagen, self.sort()== self.sort_by(|a, b| a.cmp(b)).
Chris Morgan
1
Sie können einfach aufrufen, .sort()wenn der Typ Tdas cmp::OrdMerkmal implementiert .
Simon Zyx
1
Sie könnten auch einen Blick sort_unstabledarauf werfen, dass es etwas schneller ist, aber "gleiche" Elemente neu anordnen
Bogdan Mart
0
Während die oben vorgeschlagenen Lösungen Vektoren von ganzen Zahlen sortieren können, hatte ich Probleme beim Sortieren von Vektoren von Floats.
Die einfachste Lösung war die Verwendung der Quickersort-Kiste , mit der auch Schwimmer sortiert werden können. Die Quickersort-Kiste kann auch andere Vektoren eines beliebigen Typs sortieren und implementiert Methoden zum Sortieren mithilfe von Vergleichen (sort_by).
Es folgt der Rust-Code:
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
Sie sollten keine separate Kiste benötigen, um Schwimmer zu sortieren - zum Beispiel v.sort_by(|a, b| a.partial_cmp(b).unwrap_or(Ordering::Equal))sollten Sie mit Schwimmern arbeiten. (Je nachdem, was Sie mit NaNs im Array tun möchten, können Sie eine sorgfältigere Vergleichsfunktion schreiben.)
sort_by
Methode, die ein vollständig benutzerdefiniertes Prädikat ermöglicht.self.sort()
==self.sort_by(|a, b| a.cmp(b))
..sort()
wenn der TypT
dascmp::Ord
Merkmal implementiert .sort_unstable
darauf werfen, dass es etwas schneller ist, aber "gleiche" Elemente neu anordnenWährend die oben vorgeschlagenen Lösungen Vektoren von ganzen Zahlen sortieren können, hatte ich Probleme beim Sortieren von Vektoren von Floats.
Die einfachste Lösung war die Verwendung der Quickersort-Kiste , mit der auch Schwimmer sortiert werden können. Die Quickersort-Kiste kann auch andere Vektoren eines beliebigen Typs sortieren und implementiert Methoden zum Sortieren mithilfe von Vergleichen (sort_by).
Es folgt der Rust-Code:
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
quelle
v.sort_by(|a, b| a.partial_cmp(b).unwrap_or(Ordering::Equal))
sollten Sie mit Schwimmern arbeiten. (Je nachdem, was Sie mit NaNs im Array tun möchten, können Sie eine sorgfältigere Vergleichsfunktion schreiben.)