Comment trier une liste d'objets par l'ordre alphabétique d'une de ses propriétés (pas le nom mais la valeur réelle que la propriété contient) ?
C'est simple et facile à utiliser pour les classes.
Comment trier une liste d'objets par l'ordre alphabétique d'une de ses propriétés (pas le nom mais la valeur réelle que la propriété contient) ?
Trier une liste d'objets en Dart/Flutter
1 utiliser une fonction de comparaison personnalisée:
class Customer {
String name;
int age;
Customer(this.name, this.age);
@override
String toString() {
return '{ ${this.name}, ${this.age} }';
}
}
main() {
List customers = [];
customers.add(Customer('Jack', 23));
customers.add(Customer('Adam', 27));
customers.add(Customer('Katherin', 25));
customers.sort((a, b) => a.age.compareTo(b.age));
print('Trier par Âge: ' + customers.toString());
customers.sort((a, b) => a.name.compareTo(b.name));
print('Trier par Nom: ' + customers.toString());
}
Résultat:
Trier par Âge: [{ Jack, 23 }, { Katherin, 25 }, { Adam, 27 }]
Trier par Nom: [{ Adam, 27 }, { Jack, 23 }, { Katherin, 25 }]
2 La deuxième approche consiste à étendre la classe abstraite Comparable
et à remplacer la méthode compareTo()
. Maintenant, nous n'avons pas besoin de passer une fonction de comparaison, nous appelons simplement list.sort()
au lieu de list.sort(compare)
.
class Customer extends Comparable {
String name;
int age;
Customer(this.name, this.age);
@override
String toString() {
return '{ ${this.name}, ${this.age} }';
}
// trier par Nom (asc), puis par âge (desc)
@override
int compareTo(other) {
int nameComp = this.name.compareTo(other.name);
if (nameComp == 0) {
return -this.age.compareTo(other.age); // '-' pour descendant
}
return nameComp;
}
}
main() {
List customers = [];
customers.add(Customer('Jack', 23));
customers.add(Customer('Adam', 27));
customers.add(Customer('Katherin', 25));
customers.add(Customer('Jack', 32));
customers.sort();
print(customers);
}
Résultat:
[{ Adam, 27 }, { Jack, 32 }, { Jack, 23 }, { Katherin, 25 }]
Similaire à la réponse de @pavel-shorokhov, mais fortement typée :
extension IterableExtensions sur Iterable {
Iterable sortBy>(
TSelected Function(T) selector) =>
toList()..sort((a, b) => selector(a).compareTo(selector(b)));
Iterable sortByDescending>(
TSelected Function(T) selector) =>
sortBy(selector).toList().reversed;
}
J'avais la sortie/résultat de l'apprentissage automatique fpgrowth avec chaque élément de la liste contenant une autre liste et un champ de fréquence. J'ai dû trier par fréquence en ordre décroissant, donc j'ai utilisé un peu de récursion pour cela, essayez ça pourrait fonctionner. Je sais que je suis en retard mais je poste au cas où quelqu'un d'autre pourrait en bénéficier.
sort(List fqItems) {
int len = fqItems.length;
if(len==2){
if(fqItems[0].frequency>fqItems[1].frequency){
sortedItems.add(fqItems[0]);
sortedItems.add(fqItems[1]);
}else{
sortedItems.add(fqItems[1]);
sortedItems.add(fqItems[0]);
}
return;
}else{
FrequentItem max = fqItems[0];
int index =0;
for(int i=0;i
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
2 votes
Possible duplicate de Comment puis-je trier une liste de chaînes en Dart?
0 votes
@RichardHeap oui, la solution répond à ma question mais la question est posée différemment, je suppose. Merci pour votre aide!
1 votes
J'ai écrit une réponse ici stackoverflow.com/a/59350472/10409567