본문 바로가기
코딩테스트 준비(kotlin)/문법정리

[kotlin 문법] sorted(), sort(), sortedWith(), sortWith() , sortedBy, sortBy()

by 1chanhue1 2024. 7. 10.

코틀린에서 컬렉션을 정렬하기 위해 사용하는 함수들인 sorted(), sort(), sortedWith(), sortWith(), sortedBy(), sortBy() 에 대해서 설명하겠습니다. 

1. sorted()

sorted() 함수는 데이터 변경이 안되는 리스트(Immutable List)를 정렬할 때 사용합니다. 

sorted()는 리스트의 원본을 변경하지 않고, 정렬된 리스트를 생성하여 리턴합니다.

아래는 Immutable 리스트를 sorted()로 정렬하는 예제입니다.

val numbers = listOf(5, 2, 8, 3, 1)
val sortedNumbers = numbers.sorted()

println(sortedNumbers)
// Output: [1, 2, 3, 5, 8]

2. sort()

sort()는 데이터 변경이 가능한 리스트(Mutable List)를 정렬할 때 사용합니다.

리스트 자신이 갖고 있는 요소의 순서를 변경합니다.

아래는 Mutable 리스트를 sort()로 정렬하는 예제입니다.

val numbers = mutableListOf(5, 2, 8, 3, 1)
numbers.sort()

println(numbers)
// Output: [1, 2, 3, 5, 8]

추가 정렬 함수: sortedDescending()와 sortDescending()

  • sortedDescending(): 컬렉션을 내림차순으로 정렬한 새로운 리스트를 반환합니다.
  • sortDescending(): 컬렉션을 내림차순으로 제자리에서 정렬합니다
val numbers = listOf(5, 2, 8, 3, 1)
val sortedNumbersDescending = numbers.sortedDescending()

println(sortedNumbersDescending)
// Output: [8, 5, 3, 2, 1]

val mutableNumbers = mutableListOf(5, 2, 8, 3, 1)
mutableNumbers.sortDescending()

println(mutableNumbers)
// Output: [8, 5, 3, 2, 1]

3. sortedWith() , sortWith()

sortedWith()와 sortWith()는 정렬 규칙으로 Comparator를 지정할 수 있습니다. 즉, Comparator를 변경해 자신이 원하는 조건으로 리스트를 정렬하는 것입니다.

  • sortedWith() : Immutable List에 사용 -> sorted()와 마찬가지로 정렬된 새로운 리스트를 반환
  • sortWith() : Mutable List에 사용 -> sort()와 마찬가지로 자기 자신을 정렬

sortedWith() 예시

data class Person(val name: String, val age: Int)

fun main() {
    val people = listOf(
        Person("Alice", 25),
        Person("Bob", 30),
        Person("Charlie", 20)
    )

    val sortedPeople = people.sortedWith(compareBy { it.age })
    println(sortedPeople)
    // Output: [Person(name=Charlie, age=20), Person(name=Alice, age=25), Person(name=Bob, age=30)]
}

sortWith() 예시

data class Person(val name: String, val age: Int)

fun main() {
    val people = mutableListOf(
        Person("Alice", 25),
        Person("Bob", 30),
        Person("Charlie", 20)
    )

    people.sortWith(compareBy { it.age })
    println(people)
    // Output: [Person(name=Charlie, age=20), Person(name=Alice, age=25), Person(name=Bob, age=30)]
}

4. sortedBy(), sortBy()

sortedBy()와 sortBy()는 리스트 요소가 1개의 데이터 타입으로 이루어지지 않고, 내부에 여러 객체를 갖고 있는 타입일 때, 어떤 객체를 비교해서 정렬할 지 결정할 때 사용합니다.

  • sortedBy() : Immutable List에서 사용 -> sorted()와 마찬가지로 정렬된 새로운 리스트를 반환
  • sortBy() : Mutable List에서 사용 -> Mutable List에 사용 -> sort()와 마찬가지로 자기자신을 정렬

 

sortedBy() 예시

data class Person(val name: String, val age: Int)

fun main() {
    val people = listOf(
        Person("Alice", 25),
        Person("Bob", 30),
        Person("Charlie", 20)
    )

    val sortedPeople = people.sortedBy { it.age }
    println(sortedPeople)
    // Output: [Person(name=Charlie, age=20), Person(name=Alice, age=25), Person(name=Bob, age=30)]
}

sortBy() 예시

data class Person(val name: String, val age: Int)

fun main() {
    val people = mutableListOf(
        Person("Alice", 25),
        Person("Bob", 30),
        Person("Charlie", 20)
    )

    people.sortBy { it.age }
    println(people)
    // Output: [Person(name=Charlie, age=20), Person(name=Alice, age=25), Person(name=Bob, age=30)]
}

'코딩테스트 준비(kotlin) > 문법정리' 카테고리의 다른 글

[kotlin 코틀린] groupBy와 groupingBy  (0) 2024.06.21
[kotlin] distinct 중복 제거  (0) 2024.05.22
kotlin - filter  (0) 2024.04.22
[kotlin] 코틀린 입력 및 출력  (1) 2023.10.16
[kotlin] 람다표현식  (0) 2023.08.06