[Kotlin]함수 - sort, sortDescending, sortBy, sortByDescending, sortWith, compareBy

MariGold·2025년 1월 16일

[Kotlin]함수

목록 보기
8/14

Kotlin에서는 mutable collection(array, mutablelist 등)의 원소의 순서를 바꿀 수 있는 sort, sortDescending, sortBy, sortByDescending, sortWith 함수가 있습니다. 해당 함수들은 모두 기존의 collection의 원소의 순서를 바꾸며 반환값이 존재하지 않습니다. immutable collection에서 정렬하려면 sorted, sortedDescending, sortedBy, sortedByDescending, sortedWith를 사용하며, 정렬된 새 collection을 반환합니다. 반환값을 사용하려면 반드시 변수에 저장해야 합니다. compareBy함수는 sortWith와 함께 사용해야하며, 정렬 순서를 지정할 수 있습니다.


sort

sort 함수는 collection의 요소를 오름차순으로 정렬합니다. 기존 collection의 원소의 순서가 변경되며 반환값은 없습니다.

val numbers = mutableListOf(3, 1, 4, 1, 5)

numbers.sort()
println(numbers) // [1, 1, 3, 4, 5] 출력

sortDescending

sortDescending 함수는 collection에서 요소를 내림차순으로 정렬합니다. 기존 collection의 원소가 변경되며 반환값은 없습니다.

val numbers = mutableListOf(3, 1, 4, 1, 5)

numbers.sortDescending()
println(numbers) // [5, 4, 3, 1, 1] 출력

sortBy

sortBy 함수는 collection에서 특정 조건을 기준으로 요소를 오름차순으로 정렬합니다. 조건은 람다 표현식으로 전달되며, 기존 collection의 순서가 변경됩니다.

data class Person(val name: String, val age: Int)
val people = mutableListOf(
    Person("Alice", 25),
    Person("Bob", 20),
    Person("Charlie", 30)
)

people.sortBy { it.age }
println(people) // [Bob(20), Alice(25), Charlie(30)] 출력

sortByDescending

sortByDescending 함수는 collection에서 특정 조건을 기준으로 요소를 내림차순으로 정렬합니다. sortBy와 마찬가지로 조건은 람다 표현식으로 전달되며, 기존 collection의 순서가 변경됩니다.

data class Person(val name: String, val age: Int)
val people = mutableListOf(
    Person("Alice", 25),
    Person("Bob", 20),
    Person("Charlie", 30)
)

people.sortByDescending { it.age }
println(people) // [Charlie(30), Alice(25), Bob(20)] 출력

sortWith

sortWith 함수는 collection에서 사용자 정의 비교 함수를 사용해 요소를 정렬합니다. 커스텀 정렬 로직이 필요한 경우 유용합니다.

val words = mutableListOf("apple", "banana", "cherry")

words.sortWith(compareBy { it.length })
println(words) // [apple, banana, cherry] 출력

compareBy

compareBy 함수는 sortWith와 함께 사용하며, 정렬 순서를 지정할 수 있습니다.

import kotlin.math.abs

val n = 20
val numbers = listOf(3, 10, 28)

print(numbers.sortedWith(compareBy { abs(it - n)}, { it })) // [10, 28, 3] 출력
profile
많은 것을 알아가고 싶은 Android 주니어 개발자

0개의 댓글