오름차순과 내림차순
오름차순 : 1 -> 2 -> 3 -> ... (그래프를 그렸을 때 증가하는 모양)
- sort() 함수 사용
내림차순 : 9 -> 8 -> 7 -> ...
- sortDescending() 함수 사용
불변성에 따른 정렬: -ed
sort()
mutable한 데이터집합을 정렬할 때는 sort()를 사용한다
sorted()
immutable한 데이터집합을 정렬할 때 -ed가 붙은 sorted()를 사용하면 원본 리스트는 변경하지 않고 정렬된 값을 새로운 리스트에 담아 반환한다.
- immutable한 List를 정렬할 때는 : sorted() 사용
- mutable한 MutableList를 정렬할 때는 : sort(), sorted() 둘다 사용 가능 (sorted()의 경우 List로 반환)
정렬 조건 설정 : -With()
sortWith()
인자로 전달한 compartor(정렬규칙)을 반영하여 자기 자신을 정렬한다
sortedWith()
인자로 전달한 compartor(정렬규칙)을 반영하여 정렬한 값을 새 리스트에 담아 반환한다
사용 예시
원래 String은 아스키코드 값에 따라 정렬을 하지만 문자열 길이에 따라 정렬하도록 만들기 위해선
-with() 함수에 정렬조건을 정의한 compartor를 전달한다
// 기본
val origin = listOf<String>("abd", "abc", "c", "aa")
val sorted = origin.sorted()
println(sorted)
// -with
val comparator: Comparator<String> = compareBy { it.length }
val sortedWith = origin.sortedWith(comparator)
println(sortedWith)
출력
// 기본
[aa, abc, abd, c]
// -with
[c, aa, abd, abc]
타입이 여러 개일 경우 정렬 : -By()
sortBy(), sortedBy()
리스트 내부 데이터 타입이 여러 개일 때 한가지 정렬 조건을 설정할 수 있다
사용 예시
data class Person(val name: String, val age: Int)
fun main() {
val people = listOf<Person>(
Person("Joy", 18),
Person("Jay", 20),
Person("Cho", 22)
)
// 나이로 정렬
val sortedByAge = people.sortedBy { it.age }
println(sortedByAge)
// 이름으로 정렬
val sortedByName = people.sortedBy { it.name }
println(sortedByName)
}
// 나이 정렬 결과
[Person(name=Joy, age=18), Person(name=Jay, age=20), Person(name=Cho, age=22)]
// 이름 정렬 결과
[Person(name=Cho, age=22), Person(name=Jay, age=20), Person(name=Joy, age=18)]
By와 With의 차이
by : 한 가지 정렬 조건 설정 가능
with : 정렬 조건 여러 개 설정 가능
Array 정렬
- sort() : 원본 배열 오름차순 정렬
- sortDescending() : 원본 배열 내림차순 정렬
- sorted() : 오름차순 정렬한 새 리스트 반환
- sortedDescending() : 내림차순 정렬한 새 리스트 반환
- sortedArray() : 오름차순 정렬한 새 배열 반환
- sortedArrayDescending(): 내림차순 정렬한 새 배열 반환
'Kotlin' 카테고리의 다른 글
Flow 결합 연산자 : zip, combine (0) | 2023.04.11 |
---|---|
operator fun invoke (0) | 2023.04.10 |
코루틴 1 (0) | 2022.05.12 |
[Kotlin In Action] 위임 (0) | 2022.03.30 |
연산자 오버로딩 (0) | 2021.10.20 |