반응형
코틀린 List<T> 변수의 sortedWith 함수의 람다식 코드를 실행해보자.
fun main(args: Array<String>) {
var list = listOf(2,9,6,1,7,4,3)
list = list.sortedWith(Comparator<Int>{ a, b ->
when {
a > b -> 1
a < b -> -1
else -> 0
}
})
println(list)
}
Comparator에 대한 사용 방법이 핵심.
함수에 전달되는 두 변수의 비교에 따라 1, -1, 0을 반환하게 되고 sortedWith 함수에서는 그에 맞춰서 List에 들어있는 값들을 정렬시켜준다.
따라서 [2, 9, 6, 1, 7, 4, 3] 로 이루어진 List<Int> 변수에 위 코드를 수행하면 오름차순으로 정렬된 결과가 나오게 된다.
fun main(args: Array<String>) {
var list = listOf(2,9,6,1,7,4,3)
list = list.sortedWith(Comparator<Int>{ a, b ->
when {
a < b -> 1
a > b -> -1
else -> 0
}
})
println(list)
}
부등호를 반대로 하면 정렬 또한 반대 방향.
그리고 문자열(String) 또한 sortedWith를 사용하여 사전 순으로 정렬이 가능하다.
fun main(args: Array<String>) {
var list = listOf("나", "다", "가", "라")
list = list.sortedWith(Comparator<String>{ a, b ->
when {
a > b -> 1
a < b -> -1
else -> 0
}
})
println(list)
}
문자열을 사전순으로 정렬하여 결과를 출력하는 것을 볼 수 있다.
이를 응용하여 class를 따로 생성하고 그 안의 멤버 변수를 비교하여 정렬하는 코드 또한 가능하다.
data class a(val _data: Int) {
var data = _data
}
fun main(args: Array<String>) {
var list = listOf(a(5), a(4), a(10), a(15))
list = list.sortedWith(Comparator<a>{ a, b ->
when {
a.data > b.data -> 1
a.data < b.data -> -1
else -> 0
}
})
println(list)
}
이처럼 sortedWith를 응용하면 다양한 형태의 정렬이 가능함을 알 수 있다.
반응형