달나라 노트

Kotlin - Map collection 본문

Kotlin

Kotlin - Map collection

CosmosProject 2021. 3. 15. 04:20
728x90
반응형

 

 

 

 

 

 

Original source = play.kotlinlang.org/byExample/01_introduction/01_Hello%20world

 

 

 

Kotlin에는 Map이라는 collection이 있습니다.

결론부터 말하자면 Python의 dictionary와 비슷합니다.

Key = Value가 하나의 쌍(pair)이 되고 이 쌍이 하나의 Map에 여러 개 존재할 수 있습니다.

 

다음 예시를 보시죠.

 

var map_test: MutableMap<String, Int> = mutableMapOf( // 1
        "Apple" to 1,
        "Strawberry" to 2,
        "Pineapple" to 3,
        "Orange" to 4
)

var map_test_2: Map<Int, Int> = mapOf( // 2
        1 to 10,
        2 to 20,
        3 to 18,
        4 to 20,
        5 to 100
)

fun main() {
    println(map_test) // 3
    println(map_test_2) // 3

    println(map_test.keys) // 4
    println(map_test.values) // 4
    println(map_test_2.keys) // 4
    println(map_test_2.values) // 4

    println(map_test["Strawberry"]) // 5
    println(map_test_2[3]) // 5

    println(map_test.getValue("Strawberry")) // 6
    println(map_test_2.getValue(3)) // 6

    map_test["Yellowmelon"] = 5 // 7
    println(map_test) // 7
//    map_test_2[6] = 150 // Error // 8

    println(map_test.containsKey("Apple")) // 9
    println(map_test.containsKey("Watermelon")) // 9

    map_test.forEach { // 10
        k, v -> println("Key is ${k}, Value is ${v}")
    }

    map_test.forEach { // 11
        println("Key is ${it.key}, Value is ${it.value}")
    }
}



-- Result
{Apple=1, Strawberry=2, Pineapple=3, Orange=4}
{1=10, 2=20, 3=18, 4=20, 5=100}
[Apple, Strawberry, Pineapple, Orange]
[1, 2, 3, 4]
[1, 2, 3, 4, 5]
[10, 20, 18, 20, 100]
2
18
2
18
true
false
Key is Apple, Value is 1
Key is Strawberry, Value is 2
Key is Pineapple, Value is 3
Key is Orange, Value is 4

1. Mutable Map을 생성하고 있습니다. 자료형이 MutableMap<String, Int>로 적혀있는데 Map에 사용되는 Key의 자료형이 String이고 Value의 자료형은 Int라는 뜻입니다.

 

2. read-only map을 생성하고 있습니다. Map<Int, Int>의 의미는 Key의 자료형이 Int이며 Value의 자료형도 Int라는 뜻입니다.

 

3. 생성된 Map의 형태를 보여줍니다. Python의 dictionary와 상당히 비슷하죠?

 

4. keys method는 map에 존재하는 모든 key를 출력합니다. values method는 map에 존재하는 모든 value를 출력합니다.

 

5. key를 이용한 indexing으로 해당 key에 해당되는 value를 얻을 수 있습니다.

 

6. 5번과 동일합니다. getValue method를 이용하여 어떤 key에 대응하는 value를 얻어올 수 있습니다.

 

7. map_test는 mutable map이므로 새로운 key에다가 새로운 value를 넣을 수 있습니다.

 

8. map_test_2는 read-only map이기 때문에 새로운 요소 추가나 기존 요소의 수정이 불가합니다.

 

9. map의 containKey(x) method는 x가 해당 map의 key 중에 있으면 true, 없으면 false를 반환합니다.

 

10. forEach는 map에 있는 key, value pair를 순차적으로 반환합니다. 반복문의 성격을 내장하고 있으므로 반드시 반복문처럼 curly brace로 감싸서 반환되는 값들을 이용해 실행할 내용을 명시해야 합니다.

 

11. 10번과 완전히 동일한 기능을 하지만 it keyword를 이용하여 사용할 수 있습니다.

여기서 의미하는 it은 map_test를 forEach가 반복하며 매 반복 단계마다 key=value 쌍이 반환되는데 이 key=value 쌍을 의미합니다.

따라서 key를 반환하려면 it.key의 형태로 명시해야하며 value 값을 얻으려면 it.value의 형태로 명시합니다.

 

 

 

 

 

 

* 참고

위 예시의 forEach 구문을 보면

k, v -> println("Key is ${k}, Value is ${v}")

위와 같은 부분이 있습니다.

 

forEach에 의해 순차적으로 반환되는 key, value를 어떤 문자열에 삽입하여 출력하라는 의미입니다.

이것도 마치 python의 format 함수(e.g. "Key is {k}, Value is {v}".format(k = k, v = v))와 비슷하죠?

 

 

 

 

728x90
반응형

'Kotlin' 카테고리의 다른 글

Kotlin - map function  (0) 2021.03.15
Kotlin - filter function  (0) 2021.03.15
Kotlin - Set  (0) 2021.03.15
Kotlin - List  (0) 2021.03.15
Kotlin - Loops  (0) 2021.03.15
Comments