Kotlin에서는 mutable collection(array, mutablelist 등)의 원소의 순서를 바꿀 수 있는 sort, sortDescending, sortBy, sortByDescending, sortWith 함수가 있습니다. 해당 함수들은 모두 기존의 collection의 원소의 순서를 바꾸며 반환값이 존재하지 않습니다. immutable collection에서 정렬하려면 sorted, sortedDescending, sortedBy, sortedByDescending, sortedWith를 사용하며, 정렬된 새 collection을 반환합니다. 반환값을 사용하려면 반드시 변수에 저장해야 합니다. compareBy함수는 sortWith와 함께 사용해야하며, 정렬 순서를 지정할 수 있습니다.
sort 함수는 collection의 요소를 오름차순으로 정렬합니다. 기존 collection의 원소의 순서가 변경되며 반환값은 없습니다.
val numbers = mutableListOf(3, 1, 4, 1, 5)
numbers.sort()
println(numbers) // [1, 1, 3, 4, 5] 출력
sortDescending 함수는 collection에서 요소를 내림차순으로 정렬합니다. 기존 collection의 원소가 변경되며 반환값은 없습니다.
val numbers = mutableListOf(3, 1, 4, 1, 5)
numbers.sortDescending()
println(numbers) // [5, 4, 3, 1, 1] 출력
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 함수는 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 함수는 collection에서 사용자 정의 비교 함수를 사용해 요소를 정렬합니다. 커스텀 정렬 로직이 필요한 경우 유용합니다.
val words = mutableListOf("apple", "banana", "cherry")
words.sortWith(compareBy { it.length })
println(words) // [apple, banana, cherry] 출력
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] 출력