본문 바로가기
2학년 2학기/모바일 소프트웨어 - 코틀린

Array, Generic, Collection) Map

by print_soo 2024. 10. 13.

Map은 딕셔너리와 비슷한데, 키와 값으로 이루어진 원소들의 모음이다.

 

[불변 Map - mapOf<K, V>()]

map의 출력 방식

fun main(){
    val mapA: Map<String, Int> = mapOf("One" to 1, "Two" to 2, "Three" to 3)

    //키와 값을 동시에 출력
    for ((k, v) in mapA) {
        println("($k, $v)")
    }
    //(One, 1)
    //(Two, 2)
    //(Three, 3)

    //키만 출력
    println(mapA.keys)
    //[One, Two, Three]

    //값만 출력
    println(mapA.values)
    //[1, 2, 3]
}

 

 

키가 중복된 경우 ⭐️

: 이전 값은 무시하고 새로운 값으로 저장한다.

fun main(){
    val mapA: Map<String, Int> = mapOf("One" to 1, "Two" to 2, "Three" to 3, "Three" to 4)

    //키와 값을 동시에 출력
    for ((k, v) in mapA) {
        println("($k, $v)")
    }
//    (One, 1)
//    (Two, 2)
//    (Three, 4)

}

 

따라서 키와 값을 정확하게 대응 시키려면 하나의 키에는 하나의 값만 할당해야한다.

 

Contains

: 키 여부와 값여부를 확인하는 방식은 다르다.

fun main(){
    val mapA: Map<String, Int> = mapOf("One" to 1, "Two" to 2, "Three" to 3)

    // key 포함 여부
    if(mapA.containsKey("One")){
        println(mapA["One"]) //1
    }

    // value 포함 여부
    if(1 in mapA.values){
        println("값이 존재합니다.")
    }
}

 

map은 순서가 없다.

fun main(){
    val mapA: Map<String, Int> = mapOf("One" to 1, "Two" to 2, "Three" to 3)
    val mapB: Map<String, Int> = mapOf("Two" to 2, "Three" to 3, "One" to 1)
    println(mapA == mapB) //true
}

 

빈 map에 값 추가

import java.util.*
import kotlin.collections.HashMap
import kotlin.collections.LinkedHashSet

fun main(){
    val x: Map<String, Int> = buildMap(2) {
        put("one", 1)
        put("two", 2)
    }
    println(x) //{one=1, two=2}
}

 


 

[가변 Map - mutableMapOf<K, V>()]

 

map 생성 종류들

fun main(){
    val mapA = mutableMapOf(222 to "two", 333 to "three", 444 to "four")


    val mapB: HashMap<Int, String> = hashMapOf(111 to "one")
    mapB.putAll(mapA)
    println(mapB) //{444=four, 333=three, 222=two, 111=one}

    val mapC: SortedMap<Int, String> = sortedMapOf(111 to "one")
    mapC.putAll(mapA)
    println(mapC) //정렬된 map - {111=one, 222=two, 333=three, 444=four}

    val mapD: LinkedHashMap<Int, String> = linkedMapOf(111 to "one")
    mapD.putAll(mapA)
    println(mapD) //{111=one, 222=two, 333=three, 444=four}
}

 

추가하는 방법

fun main(){
    val mapA = mutableMapOf(222 to "two")

    mapA[333] = "three"
    mapA.put(444, "four")
    
    println(mapA) //{222=two, 333=three, 444=four}
}

 

 


 

map에서 유용한 함수들

fun main(){
    val map = mapOf("key11" to 1, "key22" to 2, "key33" to 3, "key44" to 4)

    //key 중에 key1로 시작하는 것을 추출
    var keyMap = map.filterKeys { it.startsWith("key1") }
    println(keyMap) //{key11=1}


    //value 중에서 짝수인 것을 추출
    var valueMap = map.filterValues { it % 2 == 0 }
    println(valueMap) //{key22=2, key44=4}
}

'2학년 2학기 > 모바일 소프트웨어 - 코틀린' 카테고리의 다른 글

Coroutine(2)  (0) 2024.10.13
Coroutine(1)  (0) 2024.10.13
Array, Generic, Collection) Set  (0) 2024.10.13
Array, Generic, Collection) List  (0) 2024.10.13
Array, Generic, Collection) Generic  (0) 2024.10.13