Kotlin sort 정렬 오름차순, 내림차순, 임의 순

Notepad96

·

2020. 10. 11. 21:06

300x250

 

 

 

 


1. Sort(정렬)

 

kotlin은 다양한 sort 함수를 제공하여 상황에 맞은 sort 함수를 사용해야 한다.

 

 

 

 

우선 간단하게 분류를 해보면 우선 sort와 sortDescending 이 있다.

 

 

sort인 것은 오름차순 sortDescending 처럼 Descending이 붙으면 내림차순으로 정렬을 한다.

 

 

 

 

또한 sort와 sorted처럼 뒤에 ed가 붙는 것과 붙지 않는 것이 있다.

 

 

뒤에 -ed가 붙는 것은 정렬된 List 타입으로 반환해준다. 

 

 

 

따라서 -ed가 붙는 sort를 사용해 주는 경우, 해당 리스트에 다시 초기화를 해주어야만 정렬된 리스트를 저장한다.

 

 

이 외의 -By, -With와 같은 sort가 존재한다.

 

 

 

 

 

+) MutableList타입일 경우 sort, sorted 2가지 다 존재하며

 

sort를 사용할 경우 해당 MutableList를 정렬한다.

 

sorted를 사용할 경우 정렬된 List 타입을 반환하므로 이를 다시 저장해주어야 한다.

 

 

단, List의 타입일 경우 sort 형태는 없고 sorted의 형태만 존재한다.

 

 

 

 

 


2. 코 드

환경 : Kotlin Version = 1.4.20, JVM

fun main(args: Array<String>) {
    println("==================1========================")
    val ml = mutableListOf(5, 4, 1, 2, 3, 6)
    println(ml)
    ml.sort()   // 오름차순 정렬
    println(ml)



    println("===================2=======================")
    val ml2 = ml.sorted().toMutableList()   // 오름차순으로 정렬된 List 반환
    println(ml2)
    ml2.sortDescending()    // 내림차순으로 정렬
    println(ml2)




    println("====================3======================")
    val ml3 = mutableListOf(2 to "abc", 4 to "abc", 3 to "qwe", 1 to "zwr")
    println(ml3)
    ml3.sortByDescending { it.second }  // second를 기준으로 내림차순
    println(ml3)



    println("====================4======================")
    val ml4 = ml3.sortedWith( compareBy( {it.second}, {-it.first}) )    // 우선 second 기준으로 오름차순, 만약 second가 동일하다면 first로 내림차순
    println(ml4)


    println("====================5======================")
    val ml5 = mutableListOf("1", "32", "23", "4", "5")
    val ml6 = ml5.sortedWith( Comparator { a, b ->  (b+a).compareTo(a+b) })
    println(ml5)
    println(ml6)

    val ml7 = mutableListOf(2, 5, 3, 1, 4)
    val ml8 = ml7.sortedWith( Comparator { a, b -> b - a })
    println(ml7)
    println(ml8)
}

 

결 과

 

- 1. mutableList 타입의 ml을 sort 함수를 사용하여 오름차순으로 정렬하였다.

 

 

 

 

- 2. ml을 sorted 함수를 사용하여서 정렬된 상태의 List를 얻는다.

 

이를 다시 mutableList로 변환 해준다.

( 변환하지 않고 List 타입일 경우 sort -ed 형태의 정렬 함수만 존재한다.)

 

 

sortDescending 함수를 사용하여서 내림차순으로 정렬한다.

 

 

 

 

 

- 3. sortByDescending 함수를 사용하여 정렬을 하고 있다.

 

By가 붙는 sort 함수는 어느 기준을 하나 지정하면 그 값을 기준으로 정렬을 한다.

 

 

위 예시에서는 it.second를 주었으므로 second의 값, 문자열을 기준으로 내림차순 정렬한다.

 

 

 

 

 

- 4. sortedWith 함수는 comparator 를 주어 정렬의 순서를 지정해줄 수 있다.

 

 

위 예시에서 나온

 

compareBy( {it.second}, {-it.first})

 

우선 it.second를 기준으로 오름차순 정렬을 한다.

 

 

 

이후 it.second가 동일하다면 it.first를 기준으로 내림차순 정렬을 한다. 

 

(본래 오름차순이지만 마이너스(-)를 해주어서 내림차순이 된다)

 

 

 

결과적으로 second 오름차순으로, first는 내림차순으로 정렬된 List를 얻을 수 있다.

 

 

 

+)

- 5. Comparator를 사용하여 두 값을 이용하여 정렬을 할 수 있다.

 

 

 

 


3. 참 조

 

 

sort - Kotlin Programming Language

 

kotlinlang.org

 

 

300x250