Kotlin sort map by value - 맵 값(Value)으로 정렬

Notepad96

·

2020. 11. 24. 14:42

300x250

 

 

 

 


1. Map value sort

 

Map은 Key/Value 쌍의 값을 갖는 구조이다.

 

 

 

기존 Map에서는 toSortedMap 함수를 사용하여서 Key값을 기준으로 오름차순, 내림차순 등 정렬을 할 수 있었다.

 

 

 

Kotlin Map, MutableMap 추가, 삭제, 프로퍼티

1. Map, MutableMap Map과 MutableMap 또한 List와 MutableList의 관계처럼 불변과 가변의 차이를 갖는다. Map을 상속받는 MutableMap public interface MutableMap : Map { ... } Map은 Key/Value 쌍의 데이터를..

notepad96.tistory.com

 

 

그러나 Value 값들을 사용하여서 정렬을 하고 싶을 경우가 있다.

 

 

이럴 경우 Map을 List로 변환한다음 정렬을 해준 후 다시 Map으로 변환해주는 방법을 사용해야 한다.

 

 

 

 

 

또한, 리스트로 변환 시 Key/Value 쌍은 Pair<Key type, Value type> 타입이되므로

 

Key, Value를 둘 다 각각 조건을 주어 정렬을 할 수도 있다.

 

 

 

Kotlin 변수 묶기 Pair, Triple

1. 2개의 변수 묶기 - Pair data class Pair (val first: A, val second: B) Pair 클래스는 다음과 같이 정의되어 있다. Pair 클래스는 data class로서 2개의 변수를 묶어 사용하기 유용하다. fun main()..

notepad96.tistory.com

 

 

 

 


2. 코 드

환경 : Kotlin Version = 1.4.10, JVM

fun main(args : Array<String>) {

    val mm = mutableMapOf(1 to "za", 3 to "yd", 2 to "zzz", 4 to "aa")

    println("=============M A P================")
    println(mm)



    println("=============toList================")
    val tl = mm.toList()
    for(i in tl) {
        if(i is Pair<Int, String>) {
            println("타입 검사=${i.first}:${i.second}")
        }
    }



    println("=============정 렬================")
    val tl2 = tl.sortedBy { it.second }   // Value 오름차순
    //val tl2 = tl.sortedByDescending { it.second }   // Value 내림차순
    println(tl2)



    println("=============toMutableMap================")
    val mm2 = tl2.toMap().toMutableMap()
    mm2.forEach { (k, v) -> print("${k}:${v} ") }
    println()



    println("=============한 줄로 작성================")
    val mm3 = mm.toList().sortedByDescending { it.second }.toMap().toMutableMap()
    mm3.forEach { (k, v) -> print("${k}:${v} ") }
    println()
}

 

결 과

 

- toList 함수를 사용하여 List로 변환 후 for문을 반복하며 타입을 확인해 보면

 

Pair<Int, String>의 타입을 갖는 것을 볼 수 있다.

 

 

 

 

- 정렬은 리스트에서 정렬을 해주었던 것과 마찬가지의 방법으로 해주면 된다.

 

 

 

 

- 정렬 후 리스트를 다시 Map으로 변환하면 마치 Value를 사용하여 Map을 정렬한 결과를 얻을 수 있다.

 

 

단, List에는 toMap 함수만 존재하여 이후 Map의 변화가 있을 것으로 예상된다면(Map은 불변이므로 삽입X, 삭제X)

 

 

toMap 함수를 사용하여 Map으로 변환 후 toMutableMap 함수를 사용하여 MutableMap 타입으로 변환해주어야 한다.

 

 

 

 

 

- 이와 같은 과정을 자세히 알아보기 위하여 나열한 것이고 마지막을 보면 한줄로도 정렬된 결과를 얻을 수 있다.

 

 

 

 

 


3. 참 조

 

 

MutableMap - Kotlin Programming Language

 

kotlinlang.org

 

300x250