두 개의 필드로 다트 정렬 목록

이 튜토리얼에서는 Dart/Flutter에서 두 개의 필드로 목록을 정렬하는 몇 가지 방법과 기능을 보여줍니다.

여러 필드를 정렬하거나 이 자습서의 경우 두 개의 필드를 정렬합니다. 또한 두 가지 방법을 보여 드리겠습니다.
  • 사용자 지정 비교 기능을 사용합니다.
  • 확장Comparable 추상 클래스 및 재정의compareTo() 메서드

  • 전체 게시물: Dart/Flutter Sort List of objects

    사용자 정의 비교 기능을 사용하여 두 개의 필드로 다트 정렬 목록



    더 복잡한 사용자 지정 비교 함수를 목록의sort() 메서드에 전달할 것입니다.
    먼저 객체 목록을 필드name로 정렬한 다음 필드age로 정렬합니다.

    class Customer {
      String name;
      int age;
    
      Customer(this.name, this.age);
    
      @override
      String toString() {
        return '{ ${this.name}, ${this.age} }';
      }
    }
    
    main() {
      List<Customer> customers = [];
      customers.add(Customer('Jack', 23));
      customers.add(Customer('Adam', 27));
      customers.add(Customer('Katherin', 25));
    
      customers.sort((a, b) {
        int nameComp = a.name.compareTo(b.name);
        if (nameComp == 0) {
          return -a.age.compareTo(b.age); // '-' for descending
        }
        return nameComp;
      });
      print('Sort by Name(ASC), then Age(DESC):\n' + customers.toString());
    }
    


    산출:
    Sort by Name(ASC), then Age(DESC):
    [{ Adam, 27 }, { Jack, 32 }, { Jack, 23 }, { Katherin, 25 }]
    

    Comparable 추상 클래스를 사용하여 두 개의 필드로 다트 정렬 목록



    두 번째 접근 방식은 추상 클래스를 확장Comparable하고 메서드를 재정의compareTo()하는 것입니다. 이제 compare 함수를 전달할 필요가 없으며 list.sort() 대신 list.sort(compare)를 호출합니다.

    class Customer extends Comparable {
      String name;
      int age;
    
      Customer(this.name, this.age);
    
      @override
      String toString() {
        return '{ ${this.name}, ${this.age} }';
      }
    
      // sort by Name (asc)
      @override
      int compareTo(other) {
        return this.name.compareTo(other.name);
      }
    }
    
    main() {
     List<Customer> customers = [];
      customers.add(Customer('Jack', 23));
      customers.add(Customer('Adam', 27));
      customers.add(Customer('Katherin', 25));
      customers.add(Customer('Jack', 32));
    
      customers.sort();
      print('Sort by Name(ASC), then Age(DESC):\n' + customers.toString());
    }
    


    산출:
    Sort by Name(ASC), then Age(DESC):
    [{ Adam, 27 }, { Jack, 32 }, { Jack, 23 }, { Katherin, 25 }]
    

    추가 자료


  • Dart/Flutter List Tutorial with Examples
  • Dart/Flutter Constructors tutorial with examples
  • Dart/Flutter String Methods & Operators tutorial with examples
  • Dart/Flutter Future Tutorial with Examples
  • Dart/Flutter Map Tutorial with Examples
  • Dart/Flutter – Convert Object to JSON string
  • Dart/Flutter – Convert/Parse JSON string, array into Object, List
  • Dart/Flutter – Convert List to Map & Map to List
  • 좋은 웹페이지 즐겨찾기