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 |