2014-11-10 17 views

risposta

44

Una sezione mutabile di elementi con un ordinamento totale ha un metodo sort.

Poiché gli strumenti Vec<T>DerefMut<[T]>, è possibile chiamare questo metodo direttamente su un vettore, quindi vector.sort() funziona.

+0

Quali sono i requisiti per il tipo T? Viene visualizzato un messaggio di errore "Vec non implementa alcun metodo nell'ambito denominato 'sort'". Sospetto che ciò potrebbe essere dovuto al fatto che non ho implementato alcuni tratti per MyType, ma ho cmp :: PartialEq e cmp :: PartialOrd finora. –

+5

Esiste anche il metodo 'sort_by' che consente un predicato completamente personalizzato. – huon

+0

@ChrisMorgan Impressionante, funziona, grazie! –

1

Mentre le soluzioni proposte sopra possono ordinare vettori di numeri interi ho avuto problemi nell'ordinamento di vettori di galleggianti.

La soluzione più semplice era utilizzare quickersort crate, che può anche ordinare i float. La cassa quickersort può anche ordinare altri vettori di qualsiasi tipo e implementa anche metodi per ordinare i confronti con confronti (sort_by).

seguito è riportato il codice di 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 
+2

Non dovresti avere bisogno di un crate separato solo per ordinare i float - per esempio, 'v.sort_by (| a, b | a.partial_cmp (b) .unwrap_or (Ordering :: Equal))' dovrebbe funzionare con i float. (A seconda di cosa vuoi fare con i NaN nell'array, puoi scrivere una più accurata funzione di confronto.) – user4815162342

+0

* Ho avuto problemi nell'ordinamento dei vettori di float * - ed è per questo che ci sono già intere domande e risposte dedicate a quello specifico problema (https://stackoverflow.com/q/26489701/155423, https://stackoverflow.com/q/28247990/155423, https://stackoverflow.com/q/37127209/155423). – Shepmaster

Problemi correlati