vedo nella documentazione API v'è un metodo sort()
su List
, ma io non sono chiare ciò di cui ha bisogno per un parametro. L'attuale necessità è un semplice confronto diretto alfa.Come posso ordinare una lista di stringhe in Dart?
risposta
Grazie per la domanda! È possibile ordinare un elenco di stringhe in questo modo:
main() {
var fruits = ['bananas', 'apples', 'oranges'];
fruits.sort();
print(fruits);
}
Le stampe di codice di cui sopra:
apples, bananas, oranges
noti che sort()
non restituisce un valore. Ordina l'elenco senza creare un nuovo elenco. Se si desidera ordinare e stampare nella stessa linea, è possibile utilizzare il metodo cascate:
print(fruits..sort());
Per un maggiore controllo, è possibile definire la propria logica di confronto. Ecco un esempio di ordinare i frutti in base al prezzo.
main() {
var fruits = ['bananas', 'apples', 'oranges'];
fruits.sort((a, b) => getPrice(a).compareTo(getPrice(b)));
print(fruits);
}
Vediamo cosa sta succedendo qui.
Un elenco ha un metodo sort, che ha un parametro facoltativo: uno Comparator. Un comparatore è un typedef
o alias di funzione. In questo caso, è un alias per una funzione che assomiglia:
int Comparator(T a, T b)
Dalla documentazione:
Una funzione comparatore rappresenta un ordinamento così totale restituendo un intero negativo se a è minore di b, zero se a è uguale a b, e un numero intero positivo se a è maggiore di b.
Per aggiungere un solo punto alla risposta dettagliata di Seth, in generale, in
(a, b) => foo(a, b)
passato nel sort
, la funzione foo
dovrebbe rispondere un risultato intero come segue:
- se un < b, risultato dovrebbe essere < 0,
- se a = b, risultato deve essere = 0, e
- se a> b, risultato dovrebbe essere> 0.
Per la legge al di sopra di tricotomia da tenere, sia a
e b
deve essere Comparable
s.
Dopo oggi, si dovrebbe solo essere in grado di fare list.sort(). L'argomento del metodo sort è ora facoltativo e ha come valore predefinito una funzione che chiama compareTo sugli elementi stessi. Poiché String è paragonabile, dovrebbe funzionare ora.
Il metodo sort() della lista è mai stato risolto per non richiedere una funzione di confronto? O c'era una regressione? Sto usando Dart 0.2.6.0_r15355 su Ubuntu 12.04 e ottenendo i seguenti risultati: [3,1,2] .sort() == null e ['a', 'c', 'b']. Ordina () == null. – devdanke
Oops! Dart stava ordinando l'array :-) Ma la funzione sort() restituisce void :-(Quindi "print ([3,1,2] .sort())" "output" null ". In questo caso, gli sviluppatori di Dart sono non implementare uno stile di programmazione fluente, vorrei che lo facessero, perché in questo caso si potrebbe usare immediatamente il risultato di chiamare sort(). – devdanke
Pigro ordinamento. Il risultato è IQueryable.
Il comparatore personalizzato può essere passato come argomento.
import 'package:queries/collections.dart';
void main() {
var fruits = ["grape", "passionfruit", "banana", "mango",
"orange", "raspberry", "apple", "blueberry"];
var sorted = new Collection(fruits)
.orderBy((fruit) => fruit.length)
.thenBy((fruit) => fruit);
for(var fruit in sorted) {
print(fruit);
}
}
uscita:
mango
banana
orange
blueberry
raspberry
passionfruit
- 1. Come posso ordinare una lista Perl in un ordine arbitrario?
- 2. Come ordinare una lista numericamente?
- 3. come ordinare la lista python di stringhe di numeri
- 4. Ordinare una lista con un'altra
- 5. Come ordinare una lista con oggetti dinamici
- 6. come ordinare una serie di stringhe in ordine alfabetico?
- 7. Come posso ordinare le stringhe in NSMutableArray in ordine alfabetico?
- 8. Come posso ordinare una serie di stringhe alfabeticamente quando le stringhe contengono åäö?
- 9. Come ordinare una lista di liste in R?
- 10. Ordinare le stringhe in Prolog
- 11. Come posso ordinare le chiavi di una mappa in Java?
- 12. come ordinare le stringhe in javascript numericamente
- 13. Converti lista di stringhe in lista int
- 14. Python - Come ordinare una lista di liste per il quarto elemento in ogni lista?
- 15. Come posso verificare l'esistenza di una funzione in Dart?
- 16. Come ordinare una lista usando un ordine parziale in Haskell?
- 17. Come ordinare una lista di tuple dal loro primo elemento?
- 18. Ordinare una lista alfabeticamente con un modulo
- 19. Come ordinare/ordinare una lista in cui più utenti inseriscono in posizioni diverse?
- 20. Come posso ordinare la lista generica DESC e ASC?
- 21. lista di stringhe Unicode
- 22. Come ordinare (lista/tupla) di liste/tuple?
- 23. Python conversione di una tupla (di stringhe) di lunghezza sconosciuta in una lista di stringhe
- 24. Come posso ordinare le matrici in una raccolta?
- 25. Fluent NHibernate - Mappa una lista di stringhe
- 26. Come posso ordinare una lista <T> di più T.attributes?
- 27. Come posso trovare una porta TCP inutilizzata in Dart?
- 28. Come ordinare una ricerca?
- 29. Come ordinare una lista con un determinato ordine?
- 30. JQuery - lista di stringhe
Grazie! Mi dispiace lamentarmi, ma mentre sto cercando di apprezzare l'apparente versatilità di quanto sopra, non lo trovo intuitivo o in linea con l'esperienza linguistica precedente. Ragazzi, avete qualcuno con un topo di legno quadrato e una lunga barba grigia che viene fuori con una di queste cose? :) –
Questo è un artefatto storico strano. Il comparatore dovrebbe essere opzionale. In passato, abbiamo modificato la sintassi dei parametri opzionali qualche tempo fa, il che ci obbligava a rendere tutti i parametri non opzionali per un po ', incluso questo. Non abbiamo ancora avuto la possibilità di risolvere questo problema e renderlo nuovamente opzionale. – munificent
Grazie a @munificent contento di sapere che verrà risolto presto. Vedi bug http://code.google.com/p/dart/issues/detail?id=1235 –