본문으로 건너뛰기

Dart/Flutter - 리스트 정렬

Dart에서 리스트를 정렬하는 방법들을 소개합니다.

1. sort()로 리스트 오름차순/내림차순 정렬

sort()는 리스트를 오름차순으로 정렬합니다.

내림차순으로 정렬하려면, sort()에 비교 함수를 전달하여 반대로 비교하여 내림차순으로 정렬되도록 만들어야 합니다.

void main() {
List<int> numbers = [5, 2, 9, 1, 5, 6];

print("정렬 전: $numbers");

numbers.sort();
print("오름차순 정렬 후: $numbers");

// 오름차순과 반대 순서로 비교하여 내림차순으로 정렬
numbers.sort((a, b) => b.compareTo(a));
print("내림차순 정렬 후: $numbers");
}

Output:

정렬 전: [5, 2, 9, 1, 5, 6]
오름차순 정렬 후: [1, 2, 5, 5, 6, 9]
내림차순 정렬 후: [9, 6, 5, 5, 2, 1]

2. Comparable을 이용하여 커스텀 객체 정렬

일반적인 커스텀 클래스의 경우 sort()를 사용하여 정렬하려면 Comparable를 구현(implements)해야 합니다.

아래와 같이 Person 클래스는 Comparable을 구현하여 compareTo() 함수를 오버라이드했습니다.

Comparable을 구현한 클래스 객체 리스트는 sort()를 사용하여 정렬할 수 있습니다.

class Person implements Comparable<Person> {
String name;
int age;

Person(this.name, this.age);

// Comparable 인터페이스를 구현하여 정렬 순서를 제공합니다.

int compareTo(Person other) {
// 나이를 기준으로 오름차순으로 정렬합니다.
return age.compareTo(other.age);
}


String toString() {
return '$name ($age years old)';
}
}

void main() {
List<Person> people = [
Person('Alice', 30),
Person('Bob', 25),
Person('Eve', 35),
Person('Charlie', 28),
];

print('정렬 전:');
for (var person in people) {
print(person);
}

// Comparable 인터페이스를 구현했기 때문에 sort() 메서드를 호출하여
// 오름차순으로 정렬할 수 있습니다.
people.sort();

print('오름차순 정렬 후:');
for (var person in people) {
print(person);
}

// 오름차순과 반대 순서로 비교하여 내림차순으로 정렬
people.sort((a, b) => b.age.compareTo(a.age));

print('내림차순 정렬 후:');
for (var person in people) {
print(person);
}
}

Output:

정렬 전:
Alice (30 years old)
Bob (25 years old)
Eve (35 years old)
Charlie (28 years old)
오름차순 정렬 후:
Bob (25 years old)
Charlie (28 years old)
Alice (30 years old)
Eve (35 years old)
내림차순 정렬 후:
Eve (35 years old)
Alice (30 years old)
Charlie (28 years old)
Bob (25 years old)