Uknow's Lab.
article thumbnail

 

 

Map 자료구조

Map은 Key, Value(키 - 값)를 정의할 때 쓰이는 자료구조입니다.

파이썬의 딕셔너리, JSON을 떠올리면 쉬울 텐데요.

 

Key를 통해 Value에 접근하거나 검색, 수정, 삭제 등 접근을 할 수 있으며,

Key를 통해 접근하므로, Key는 중복이 불가능하며, Value는 중복이 가능합니다.

 

 

Map 사용법

fun main() {
    val map = mapOf<String, String>("키1" to "값1", "키2" to "값2", "키3" to "값3")
    map["키1"] = "값2" // 에러 발생

    val map2 = mutableMapOf<String, String>("키1" to "값1", "키2" to "값2", "키3" to "값3")
    map2["키1"] = "값2" // 가능


	// MapOf로 생성 시, 자료형 생략 가능
    val map3 = mutableMapOf("키1" to "값1", "키2" to "값2", "키3" to "값3")
}

 

 

맵 자료구조는 Map<키 자료형, 값 자료형>으로 나타내며,

mapOf로 생성과 초기화를 동시에 할 수 있습니다.

키 - 값 관계는 앞서 본 infix 함수인 to를 사용해 나타낼 수 있습니다.

 

Map 역시 list, set과 마찬가지로 불변/가변으로 나눠집니다.

불변은 당연하게도 새로운 값의 할당이 불가능하며,

mutableMap을 사용했을 때만 새로운 값의 할당이 가능합니다.

 

 

val map = mapOf<String, Int>()
val map = mutableMapOf<String, Int>()

 

빈 Map을 생성하고 싶을 땐 위와 같이 () 안에 아무것도 넣어주지 않으면 됩니다.

 

 

fun main() {
    val map = mutableMapOf<String, Int>()
    map["a"] = 1
    map["b"] = 2
    map["c"] = 3


    println(map["a"])
    println(map["b"])

    map["a"] = 4
    println(map["a"])

    println(map.getOrDefault("d", 0))
}

// 출력
1
2
4
0

 

Map의 경우 위와같이 map[key]를 통해 접근이 가능하며,

존재하지 않는 키에 접근하려 하면 에러가 발생합니다.

존재하지 않을 수도 있는 키에 접근하려면 getOrDefault를 사용하는데,

만약 키가 존재하지 않을 경우의 디폴트값을 지정해 넘겨받을 수 있습니다.

 

 

Map과 for 반복문

fun main() {
    val map = mapOf(1 to "one", 2 to "two", 3 to "three")

    for ((key, value) in map) {
        println("키 = $key, 값 = $value")
    }
}

// 출력
키 = 1, 값 = one
키 = 2, 값 = two
키 = 3, 값 = three

 

Map을 사용해 반복문을 돌리고 싶을 땐, 위와 같이 사용이 가능합니다.

 

 

fun main() {
    val map = mapOf(1 to "one", 2 to "two", 3 to "three")

    map.forEach { (k, v) ->
        println("$k -> $v")
    }
}

 

혹은 위와 같이 forEach를 사용할 수도 있습니다.

인자는 key, value 순 입니다.

profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.