Na przykład mam listę ciągów takich jak:
val list = listOf("a", "b", "c", "d")
i chcę przekonwertować go na mapę, w której ciągi są kluczami.
Wiem, że powinienem użyć tej .toMap()
funkcji, ale nie wiem jak i nie widziałem żadnych przykładów.
dictionary
kotlin
LordScone
źródło
źródło
Pair
instancji może być bardzo kosztowna w przypadku dużych kolekcjiOd
List
doMap
zassociate
funkcjąW Kotlin 1.3
List
ma funkcję o nazwieassociate
.associate
posiada następującą deklarację:Stosowanie:
Od
List
doMap
zassociateBy
funkcjąU Kotlina
List
ma funkcję o nazwieassociateBy
.associateBy
posiada następującą deklarację:Stosowanie:
źródło
* Odniesienie: Dokumentacja Kotlin
1- Associate (aby ustawić zarówno klucze, jak i wartości): Zbuduj mapę, która może ustawić kluczowe i wartościowe elementy:
2- AssociateBy (wystarczy ustawić klucze przez obliczenia): Zbuduj mapę, na której możemy ustawić nowe klucze, analogiczne elementy zostaną ustawione dla wartości
3- AssociateWith (po prostu ustaw wartości przez obliczenia): Zbuduj mapę, na której możemy ustawić nowe wartości, analogiczne elementy zostaną ustawione dla kluczy
Przykład z porad Kotlin:
źródło
Możesz użyć
associate
do tego zadania:W tym przykładzie ciągi znaków z
list
stają się kluczami, a odpowiadające im długości (na przykład) stają się wartościami wewnątrz mapy.źródło
Jeśli masz na liście duplikaty , których nie chcesz stracić, możesz to zrobić za pomocą
groupBy
.W przeciwnym razie, jak wszyscy mówili, użyj
associate/By/With
(co, jak sądzę, w przypadku duplikatów zwróci tylko ostatnią wartość z tym kluczem).Przykład grupowania listy osób według wieku:
Wyniki:
źródło
To się zmieniło w wersji RC.
ja używam
val map = list.groupByTo(destinationMap, {it.facebookId}, { it -> it.point })
źródło