Kotlin에서 List를지도로 변환하는 방법?
예를 들어 다음과 같은 문자열 목록이 있습니다.
val list = listOf("a", "b", "c", "d")
문자열이 키인지도로 변환하고 싶습니다.
나는 그 .toMap()
기능을 사용해야한다는 것을 알고 있지만 그 방법을 모르겠으며 그 예를 보지 못했습니다.
두 가지 선택이 있습니다.
첫 번째이자 가장 성능이 좋은 것은 associateBy
키와 값을 생성하기 위해 두 개의 람다 를 사용 하고 맵 생성을 인라인하는 함수 를 사용하는 것입니다.
val map = friends.associateBy({it.facebookId}, {it.points})
두 번째로 성능이 떨어지는 두 번째는 표준 map
함수를 사용 하여 최종 맵을 생성하는 Pair
데 사용할 수 있는 목록을 작성하는 것입니다 toMap
.
val map = friends.map { it.facebookId to it.points }.toMap()
에서 List
로 Map
와 associate
기능
Kotlin 1.3 List
에는이라는 함수가 associate
있습니다. associate
다음과 같은 선언이 있습니다.
fun <T, K, V> Iterable<T>.associate(transform: (T) -> Pair<K, V>): Map<K, V>
리턴
Map
의해 제공 함유 키 - 값 쌍transform
함수는 주어진 컬렉션의 요소에 적용.
용법:
class Person(val name: String, val id: Int)
fun main() {
val friends = listOf(Person("Sue Helen", 1), Person("JR", 2), Person("Pamela", 3))
val map = friends.associate({ Pair(it.id, it.name) })
//val map = friends.associate({ it.id to it.name }) // also works
println(map) // prints: {1=Sue Helen, 2=JR, 3=Pamela}
}
에서 List
로 Map
와 associateBy
기능
Kotlin List
에는이라는 기능이 associateBy
있습니다. associateBy
다음과 같은 선언이 있습니다.
fun <T, K, V> Iterable<T>.associateBy(keySelector: (T) -> K, valueTransform: (T) -> V): Map<K, V>
지정된 컬렉션의 요소에 적용 되는 함수에 의해
Map
제공되고valueTransform
색인화 된 값을 포함 하는를 반환합니다keySelector
.
용법:
class Person(val name: String, val id: Int)
fun main() {
val friends = listOf(Person("Sue Helen", 1), Person("JR", 2), Person("Pamela", 3))
val map = friends.associateBy(keySelector = { person -> person.id }, valueTransform = { person -> person.name })
//val map = friends.associateBy({ it.id }, { it.name }) // also works
println(map) // prints: {1=Sue Helen, 2=JR, 3=Pamela}
}
associate
이 작업에 사용할 수 있습니다 :
val list = listOf("a", "b", "c", "d")
val m: Map<String, Int> = list.associate { it to it.length }
이 예에서 문자열 list
은 키가되고 해당 길이 (예 :)는 맵 내부의 값이됩니다.
- 반복 가능한 시퀀스 요소를 kotlin의 맵으로 변환
- 동료 대 동료로
* 참고 : Kotlin 설명서
1- 연관 (키와 값 모두 설정) : 키와 값 요소를 설정할 수있는 맵을 작성하십시오.
IterableSequenceElements.associate { newKey to newValue } //Output => Map {newKey : newValue ,...}
두 쌍 중 하나가 동일한 키를 가지면 마지막 키가 맵에 추가됩니다.
반환 된 맵은 원래 배열의 항목 반복 순서를 유지합니다.
2- AssociateBy (계산으로 키 설정) : 새 키를 설정할 수있는 맵을 작성하면 비슷한 요소가 값으로 설정됩니다.
IterableSequenceElements.associateBy { newKey } //Result: => Map {newKey : 'Values will be set from analogous IterableSequenceElements' ,...}
3- AssociateWith (계산으로 값을 설정) : 새로운 값을 설정할 수있는 맵을 작성하면 유사한 요소가 키에 설정됩니다
IterableSequenceElements.associateWith { newValue } //Result => Map { 'Keys will be set from analogous IterableSequenceElements' : newValue , ...}
RC 버전에서 변경되었습니다.
나는 사용하고있다 val map = list.groupByTo(destinationMap, {it.facebookId}, { it -> it.point })
예를 들어 다음과 같은 문자열 목록이 있습니다.
val list = listOf("a", "b", "c", "d")
문자열이 키인지도로 변환해야합니다.
이를 수행하는 두 가지 방법이 있습니다.
The first and most performant is to use associateBy function that takes two lambdas for generating the key and value, and inlines the creation of the map:
val map = friends.associateBy({it.facebookId}, {it.points})
The second, less performant, is to use the standard map function to create a list of Pair which can be used by toMap to generate the final map:
val map = friends.map { it.facebookId to it.points }.toMap()
Source: https://hype.codes/how-convert-list-map-kotlin
참고URL : https://stackoverflow.com/questions/32935470/how-to-convert-list-to-map-in-kotlin
'IT박스' 카테고리의 다른 글
Hamcrest에서 목록이 비어 있지 않은지 확인 (0) | 2020.06.21 |
---|---|
부스트 상태 차트와 메타 상태 머신 (0) | 2020.06.21 |
git-diff 출력의 공백 색칠 (0) | 2020.06.20 |
Bash에서 정규 표현식과 문자열을 어떻게 일치시킬 수 있습니까? (0) | 2020.06.20 |
자바 : 정수와 == (0) | 2020.06.20 |