Jakie są wymagania dla typu T? Otrzymuję komunikat o błędzie „Vec <MyType> nie implementuje żadnej metody w zakresie o nazwie„ sort ””. Podejrzewam, że może to być spowodowane tym, że nie zaimplementowałem niektórych cech dla MyType, do tej pory mam cmp :: PartialEq i cmp :: PartialOrd.
Maxim Sloyko
9
Istnieje również sort_bymetoda, która pozwala na całkowicie niestandardowy predykat.
huon
9
Jak mówią doktorzy, self.sort()== self.sort_by(|a, b| a.cmp(b)).
Chris Morgan,
1
Możesz po prostu zadzwonić, .sort()jeśli typ Timplementuje cmp::Ordcechę.
Simon Zyx
1
Możesz też rzucić okiem na sort_unstableto, że jest nieco szybszy, ale możesz zmienić kolejność elementów „równych”
Bogdan Mart
1
Chociaż zaproponowane powyżej rozwiązania mogą sortować wektory liczb całkowitych, miałem problemy z sortowaniem wektorów typu float.
Najprostszym rozwiązaniem było użycie szybkiej skrzyni , która może również sortować pływaki. Skrzynia quickersort może również sortować inne wektory dowolnego typu, a także implementuje metody sortowania za pomocą porównań (sort_by).
Poniżej znajduje się kod Rusta:
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
Nie powinieneś potrzebować oddzielnej skrzynki tylko do sortowania spławików - na przykład v.sort_by(|a, b| a.partial_cmp(b).unwrap_or(Ordering::Equal))powinieneś pracować z pływakami. (W zależności od tego, co chcesz zrobić z NaN w tablicy, możesz napisać bardziej ostrożną funkcję porównawczą.)
sort_by
metoda, która pozwala na całkowicie niestandardowy predykat.self.sort()
==self.sort_by(|a, b| a.cmp(b))
..sort()
jeśli typT
implementujecmp::Ord
cechę.sort_unstable
to, że jest nieco szybszy, ale możesz zmienić kolejność elementów „równych”Chociaż zaproponowane powyżej rozwiązania mogą sortować wektory liczb całkowitych, miałem problemy z sortowaniem wektorów typu float.
Najprostszym rozwiązaniem było użycie szybkiej skrzyni , która może również sortować pływaki. Skrzynia quickersort może również sortować inne wektory dowolnego typu, a także implementuje metody sortowania za pomocą porównań (sort_by).
Poniżej znajduje się kod Rusta:
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
źródło
v.sort_by(|a, b| a.partial_cmp(b).unwrap_or(Ordering::Equal))
powinieneś pracować z pływakami. (W zależności od tego, co chcesz zrobić z NaN w tablicy, możesz napisać bardziej ostrożną funkcję porównawczą.)