119 votes

Trier une liste d'objets en Flutter (Dart) par valeur de propriété

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) ?

2 votes

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

8voto

Paresh Mangukiya Points 13942

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 }]

6voto

Sandeep Maurya Points 1254

En utilisant la fonction Comparator, triez les Utilisateurs par id.

Comparator sortById = (a, b) => a.id.compareTo(b.id);
users.sort(sortById);

Maintenant nous pouvons le trier dans l'ordre inverse/descendant.

users = users.reversed.toList();

0 votes

C'est simple et facile à utiliser pour les classes.

3voto

Niklas Raab Points 108

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;

}

2voto

Tanmoy Karmakar Points 11

Pour le trier dans l'ordre inverse :

list.sort((a, b) {
          return b.status.toLowerCase().compareTo(a.status.toLowerCase());
        });

1voto

Zeeshan Mehdi Points 36

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.com

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.

Powered by:

X