두 개의 필드로 다트 정렬 목록
여러 필드를 정렬하거나 이 자습서의 경우 두 개의 필드를 정렬합니다. 또한 두 가지 방법을 보여 드리겠습니다.
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 }]
추가 자료
Reference
이 문제에 관하여(두 개의 필드로 다트 정렬 목록), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/tienbku/dart-sort-list-by-two-fields-21ae텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)