조용한 담장

코틀린(Kotlin) Collections : Map Specific Operations 본문

kotlin

코틀린(Kotlin) Collections : Map Specific Operations

iosroid 2020. 5. 8. 14:25

kotlin

코틀린의 collection 의 Map Specific Operations 에 대해 살펴보자.

원문 https://kotlinlang.org/docs/reference/map-operations.html 을 보며 정리.

 

Retrieving keys and values

get()

[ ]

getValue()

getOrElse()

getOrDefault()

val numbersMap = mapOf("one" to 1, "two" to 2, "three" to 3)
println(numbersMap.get("one")) // 1
println(numbersMap["one"]) // 1
println(numbersMap.getValue("two")) // 2
println(numbersMap.getOrDefault("four", 10)) // 10
println(numbersMap.getOrElse("four") { 10 }) // 10
println(numbersMap["five"])               // null
//numbersMap.getValue("six")      // exception!

keys: a set of all map keys.

values: a collection of all map values.

val numbersMap = mapOf("one" to 1, "two" to 2, "three" to 3)
println(numbersMap.keys) // [one, two, three]
println(numbersMap.values) // [1, 2, 3]

Filtering

filter()

val numbersMap = mapOf("key1" to 1, "key2" to 2, "key3" to 3, "key11" to 11)
val filteredMap = numbersMap.filter { (key, value) -> key.endsWith("1") && value > 10}
println(filteredMap) // {key11=11}

filterKeys()

filterValues()

val numbersMap = mapOf("key1" to 1, "key2" to 2, "key3" to 3, "key11" to 11)
val filteredKeysMap = numbersMap.filterKeys { it.endsWith("1") }
val filteredValuesMap = numbersMap.filterValues { it < 10 }

println(filteredKeysMap) // {key1=1, key11=11}
println(filteredValuesMap) // {key1=1, key2=2, key3=3}

plus and minus operators

plus (+)

오른쪽 피연산자의 key/value 가 왼쪽 피연산자 Map 에 존재하면 오른쪽 피연산자의 것을 가진 맵을 결과로 만든다.

val numbersMap = mapOf("one" to 1, "two" to 2, "three" to 3)
println(numbersMap + Pair("four", 4)) // {one=1, two=2, three=3, four=4}
println(numbersMap + Pair("one", 10)) // {one=10, two=2, three=3}
println(numbersMap + mapOf("five" to 5, "one" to 11)) // {one=11, two=2, three=3, five=5}

minus (-)

왼쪽 피연산자인 Map 에서 오른쪽 피연산자가 가지는 key 를 제외한 Map 을 생성한다.

오른쪽 피연산자는 하나 혹은 그 이상의 key 를 가지는 collection 이 올 수 있다.

val numbersMap = mapOf("one" to 1, "two" to 2, "three" to 3)
println(numbersMap - "one") // {two=2, three=3}
println(numbersMap - listOf("two", "four")) // {one=1, three=3}

Map write operations

Mutable Map 의 write operation 의 두가지 룰:

  • value 는 업데이트 될 수 있다. key 는 변경되지 않는다: 한번 추가된 entry 의 key 는 변하지 않는다.

  • 각각의 모든 key 는 한개의 value 와 엮어진다. entry 자체를 더하거나 뺄수 있다.

Adding and updating entries

put()

기본 LinkedHashMap 은 마지막 위치에 entry 를 추가하지만 order 정의에 따라 위치는 다르다.

val numbersMap = mutableMapOf("one" to 1, "two" to 2)
numbersMap.put("three", 3)
println(numbersMap) // {one=1, two=2, three=3}

putAll()

argument 는 Map 또는 Iterable, Sequence, Array 로 구성된 Pair 들이 올 수 있다.

val numbersMap = mutableMapOf("one" to 1, "two" to 2, "three" to 3)
numbersMap.putAll(setOf("four" to 4, "five" to 5))
println(numbersMap) // {one=1, two=2, three=3, four=4, five=5}
numbersMap.putAll(listOf(Pair("six", 6), Pair("seven", 7 )))
println(numbersMap) // {one=1, two=2, three=3, four=4, five=5, six=6, seven=7}

put()putAll() 모두 이미 존재하는 key 의 value 를 덮어쓴다.

val numbersMap = mutableMapOf("one" to 1, "two" to 2)
val previousValue = numbersMap.put("one", 11)
println("value associated with 'one', before: $previousValue, after: ${numbersMap["one"]}")
println(numbersMap)

// output:
// value associated with 'one', before: 1, after: 11
// {one=11, two=2}

plusAssign (+=)

[ ]

val numbersMap = mutableMapOf("one" to 1, "two" to 2)
numbersMap["three"] = 3     // calls numbersMap.put("three", 3)
numbersMap += mapOf("four" to 4, "five" to 5)
println(numbersMap) // {one=1, two=2, three=3, four=4, five=5}

Removing entries

remove()

val numbersMap = mutableMapOf("one" to 1, "two" to 2, "three" to 3)
numbersMap.remove("one")
println(numbersMap) // {two=2, three=3}
numbersMap.remove("three", 4)            //doesn't remove anything
println(numbersMap) // {two=2, three=3}

keys, values

val numbersMap = mutableMapOf("one" to 1, "two" to 2, "three" to 3, "threeAgain" to 3)
numbersMap.keys.remove("one")
println(numbersMap) // {two=2, three=3, threeAgain=3}
numbersMap.values.remove(3)
println(numbersMap) // {two=2, threeAgain=3}

minusAssign (-=)

val numbersMap = mutableMapOf("one" to 1, "two" to 2, "three" to 3)
numbersMap -= "two"
println(numbersMap) // {one=1, three=3}
numbersMap -= "five"             //doesn't remove anything
println(numbersMap) // {one=1, three=3}
Comments