[Kotlin] Collections Map에 대한 모든 사용법
2021. 8. 16. 15:31ㆍ[Algorithm] 알고리즘 정리 - Kotlin
반응형
안녕하세요.
알고리즘 문제 풀이 중 Map에 대한 Method와 속성등 까먹는게 너무 많아서 정리해둡니다.
Map이란 ?
Map은 다른 자료구조와는 다르게 Key와 Value를 쌍으로 데이터를 저장하는 자료구조 입니다.
Key를 통해 Value에 접근할 수도 있고 Value를 통해 Key를 찾을 수도 있습니다.
또 하나의 정의된 Map에서는 Key의 중복은 불가능 하지만 Value의 중복은 가능 합니다.
1. Map 생성
var map = mapOf<String, Int>("안드" to 1, "로이드" to 2) // 수정할 수 없는 UnMutable
print(map)
map["빠끄"] = 3
var mutableMap = mutableMapOf<String, Int>("안드" to 1, "로이드" to 2) // 수정할 수 있는 Mutable
print(mutableMap)
mutableMap["앙드"] = 3
print(mutableMap)
위와 같이 map을 선언하였습니다. Map은 UnMutable로 처음 정의한 다음에는 수정할 수 없습니다.
map["빠끄"] = 3은 잘못된 코드
하지만 MutableMap은 수정이 가능합니다.
2. Map의 다양한 메소드
알고리즘 문제를 풀면서 가장 많이 사용하였고 필요한 메소드들을 설명 드리겠습니다.2.1 추가
var hashMap = HashMap<String,Int>()
hashMap["알고리즘 어려워"] = 1
// 이렇게 '알고리즘 어려워'라는 키와 value 1이 대입됩니다.
2.2 삭제
hashMap.remove("알고리즘 어려워")
// 키값을 활용해 제거할 수 있습니다.
2.3 수정
첫 번째
hashMap["알고리즘 어려워"] = 3
// 간단한 수정 방법
if(hashMap.containsKey("알고리즘 어려워") {
hashMap["알고리즘 어려워"] = hashMap["알고리즘 어려워"] + 1
}
// 알고리즘 문제 중 중복을 해결하기 위해 map을 쓰는 경우가 많은데 containsKey 메서드로 해당 키값이
// 존재하는지 확인하고 수정하는 방법이다.
// 값이 있는지 확인하고 싶을 때는 containsValue를 사용한다.
두 번째
hashMap.replace("알고리즘어려워", hashMap["알고리즘 어려워"] + 7)
hashMap.replace("알고리즘어려워", 5)
replace 메서드를 사용하는 방법도 있다.
2.4 클리어
hashMap.clear()
2.5 Count
hashMap.count()
// 이 메서드로 hashMap에 들어 있는 원소의 개수를 알 수 있다.
hashMap.count { it.value == 0}
//이 메서드로 hashMap의 들어 있는 원소 중 Value의 값이 0인 원소의 개수를 알 수 있다.
2.6 filter
val items = HashMap<String, Int>()
items["A"] = 10
items["B"] = 20
items["C"] = 30
val filteredItems = items.filterKeys {it == "A" || it == "C"}
println("키가 A이고 C인 값을 찾기 $filteredItems")
val filteredItems2 = items.filterValues {it == 20}
print("Value가 20인 Map은 $filteredItems2")
val filteredItems3 = items.filter {it.key == "B" && it.value == 20}
println("Key가 B이고 Value가 20인 값 $filteredItems3")
-- 출력 --
2.7 for문
Map의 for문은 일반 list의 for문과는 조금 다릅니다.
val items = HashMap<String, Int>()
items["A"] = 10
items["B"] = 20
items["C"] = 30
// 1번 for Each
items.forEach { key, value ->
println("$key 이고$value 이다")
}
items.forEach { key, value ->
if(key == "A") {
println(value)
}
}
println("----2번----")
// 2번 for Loop
for((key,value) in items) {
println("$key 이고 $value 이다.")
}
for((key,value) in items) {
if(key == "C") {
println("$value")
}
}
}
---- 출력 ----
2.8 정렬
{
val items = HashMap<String, Int>()
items["A"] = 10
items["B"] = 20
items["C"] = 30
// 키값으로 정렬
var map = items.toSortedMap (compareBy{it}) // 키값을 오름차순 정렬
var map2 = items.toSortedMap(compareByDescending {it})
// value를 중심으로 정렬
map을 value 중심으로 정렬하려면 list로 변환 후 map으로 변환해야 합니다.
var sortedMap = items.toList().sortedBy {it.second}.toMap().toMutableMap() // 오름차순
var sortedMap = items.toList().sortedByDescending {it.second}.toMap().toMutableMap() // 내림차순
}
이정도로 Map의 대한 메소드 소개를 마치겠습니다.
더 많은 메소드를 알고 싶으시다면
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-mutable-map/
에서 확인해주세요~~
반응형
'[Algorithm] 알고리즘 정리 - Kotlin' 카테고리의 다른 글
[Algorithm] N개의 최대공약수, 최소공배수 - 유클리드 호제법, Kotlin (0) | 2021.11.05 |
---|---|
[Kotlin] data class 정렬 하는 방법 feat. Programmers 복서 정렬하기 (0) | 2021.09.13 |