✅ Kotlin의 컬렉션은 정렬 메서드가 매우 다양합니다. 특히 다중 정렬은 꼭 알야둬야합니다.
🔹 1. 기본 정렬
✅ 배열 정렬 (IntArray, Array 등)
val arr = intArrayOf(3, 1, 2)
arr.sort() // 오름차순
arr.sortDescending() // 내림차순
val arr2 = arrayOf(3, 1, 2)
arr2.sort() // 오름차순 (Comparable 구현 필요)
✅ 리스트 정렬
val list = mutableListOf(3, 1, 2)
list.sort() // 오름차순 (in-place)
list.sortDescending() // 내림차순
🔹 2. 컬렉션 정렬 with 정렬 기준
✅ 문자열 리스트 정렬
val list = listOf("banana", "apple", "cherry")
val sorted = list.sortedBy { it } // ["apple", "banana", "cherry"]
sorted()또는sortedBy { it }모두 문자열 사전순 정렬- 문자열은
Comparable구현됨 → 정렬 기준 생략 가능
✅ 대소문자 무시 정렬
val list = listOf("Banana", "apple", "Cherry")
val sorted = list.sortedBy { it.lowercase() } // ["apple", "Banana", "Cherry"]
- 혹은
compareToIgnoreCase:
val sorted = list.sortedWith(compareBy(String::compareToIgnoreCase))
✅ sorted/sortedBy: 정렬된 새 리스트 반환
val list = listOf(3, 1, 2)
val sorted = list.sorted() // [1, 2, 3]
val sortedBy = list.sortedBy { it } // 같은 결과
✅ 원본 변경: sortBy / sortWith
val list = mutableListOf("bb", "a", "ccc")
list.sortBy { it.length } // 길이 기준 정렬
🔹 3. 사용자 정의 정렬 (Pair, 데이터 클래스)
✅ Pair 정렬 (2차원 데이터)
val list = mutableListOf(Pair(1, 2), Pair(3, 1), Pair(2, 3))
list.sortWith(compareBy({ it.first }, { it.second }))
- 첫 번째 원소 오름차순, 같으면 두 번째 원소 오름차순
✅ Pair 정렬 (두 번째 내림차순)
list.sortWith(compareBy<Pair<Int, Int>> { it.first }.thenByDescending { it.second })
✅ 데이터 클래스 정렬
data class Student(val name: String, val score: Int)
val students = mutableListOf(
Student("Alice", 80),
Student("Bob", 95),
Student("Charlie", 70)
)
students.sortBy { it.score } // 점수 기준 오름차순
🔹 4. Map 정렬
✅ Map → List로 변환 후 정렬
val map = mapOf("a" to 3, "b" to 1, "c" to 2)
val sorted = map.toList().sortedBy { it.second }.toMap()
✅ 요약 정리
| 구분 | 함수 | 설명 |
|---|---|---|
| 배열 정렬 | sort(), sortDescending() |
IntArray 등 원본 정렬 |
| 리스트 정렬 | sort(), sortBy {} |
MutableList 정렬 (제자리) |
| 새 정렬 리스트 | sorted(), sortedBy {} |
불변 List 반환 |
| 다중 조건 | sortWith(compareBy {..}) |
Pair, 클래스 정렬 시 유용 |
| Map 정렬 | map.toList().sortedBy {} |
리스트 변환 후 재생성 |
다음은 시리즈 ⑩: 고차 함수 정리 (map, filter, any 등) 으로 이어집니다.
'Code Odyssey' 카테고리의 다른 글
| Kotlin 코딩테스트 문법 시리즈 ⑪ : 컬렉션 유틸 함수 정리 (zip, chunked, windowed 등) (4) | 2025.07.11 |
|---|---|
| Kotlin 코딩테스트 문법 시리즈 ⑩ : 고차 함수 정리 (map, filter, any 등) (1) | 2025.07.10 |
| Kotlin 코딩테스트 문법 시리즈 ⑧ : 스택 / 큐 / 우선순위 큐 정리 (0) | 2025.07.08 |
| Kotlin 코딩테스트 문법 시리즈 ⑦ : 2차원 배열(리스트) 정리 (2) | 2025.07.07 |
| Kotlin 코딩테스트 문법 시리즈 ⑥ : Map & Set 정리 (0) | 2025.07.06 |