Flutter/Dart - 리스트 정렬 (오름차순, 내림차순)

리스트의 모든 요소들을 오름차순 또는 내림차순으로 정렬하는 방법을 소개합니다.

1. List.sort() 함수로 정렬

1.1 오름차순 정렬

List.sort()는 리스트를 오름차순으로 정렬합니다. 원본 리스트의 순서가 변경됩니다.

void main() {

    List list = [5, 1, 4, 3, 2];

    list.sort();
    print(list);
}

Output:

[1, 2, 3, 4, 5]

1.2 내림차순 정렬

만약 내림차순으로 정렬하려면, List.sort(compare)를 이용하여 정렬 규칙을 변경해야 합니다.

List.sort(compare)는 리스트의 모든 요소에 대해서 compare 함수를 이용하여 비교합니다.

아래 예제를 보면, a와 b의 비교 순서를 반대로 변경하여 오름차순이 내림차순으로 변경되도록 했습니다.

void main() {

    List list = [5, 1, 4, 3, 2];

    list.sort((a, b) => b.compareTo(a));
    print(list);
}

Output:

[5, 4, 3, 2, 1]

다른 방법으로, 오름차순으로 정렬된 배열을 reversed로 역순으로 변경하여 내림차순으로 바꾸는 방법이 있습니다.

void main() {

    List list = [5, 1, 4, 3, 2];

    list.sort();

    List newList = List.from(list.reversed);
    print(newList);
}

Output:

[5, 4, 3, 2, 1]

2. 원본 리스트 변경 없이 정렬

위의 예제들은 원본 리스트의 순서를 변경하였습니다.

만약 원본 리스트의 순서는 변경하지 않고, 정렬된 새로운 리스트를 만들고 싶을 때는 아래와 같이 리스트를 복사하고, 복사된 리스트를 정렬하면 됩니다.

void main() {

    List list = [5, 1, 4, 3, 2];

    List newList = List.from(list);
    newList.sort();

    print(list);
    print(newList);
}

Output:

[5, 1, 4, 3, 2]
[1, 2, 3, 4, 5]

3. 문자열의 길이를 기준으로 정렬

기본적으로 sort()는 객체를 비교합니다.

만약 String 리스트에서 String의 길이를 기준으로 정렬을 하고 싶을 때는 compare 함수를 구현하고 sort()에 전달해야 합니다.

아래 예제는 String의 length의 크기를 기준으로 리스트를 정렬합니다.

void main() {

    List list = ["apple", "banana", "kiwi", "melon"];

    list.sort((a, b) => a.length.compareTo(b.length));
    print(list);
}

Output:

[kiwi, apple, melon, banana]

4. Custom 클래스 객체의 리스트 정렬

Custom 클래스 객체의 리스트를 정렬하는 방법입니다.

아래 예제는 Custom 클래스, Person 클래스 객체의 리스트를 정렬합니다.

  • Person의 age를 기준으로 오름차순으로 정렬
  • compare 함수에서 객체의 age 값을 비교하여 정렬하도록 구현
class Person {
    String name;
    int age;

    Person(this.name, this.age);

    
    String toString() {
        return "{$name: $age}";
    }
}

void main() {

    List<Person> list = [
        new Person("Peter", 30),
        new Person("John", 25),
        new Person("Patrick", 33),
        new Person("Tom", 28),
    ];

    list.sort((a, b) => a.age.compareTo(b.age));
    print(list);
}

Output:

[{John: 25}, {Tom: 28}, {Peter: 30}, {Patrick: 33}]
Loading script...

Related Posts

codechachaCopyright ©2019 codechacha