关于词典:如何在Kotlin中将List转换为Map?

How to convert List to Map in Kotlin?

例如,我有一个字符串列表,比如:

1
val list = listOf("a","b","c","d")

我想把它转换成一个映射,其中字符串是键。

我知道我应该使用.toMap()函数,但我不知道该如何使用,而且我没有看到它的任何例子。


您有两个选择:

第一个也是最具性能的是使用associateBy函数,它使用两个lambda来生成键和值,并在创建映射时输入:

1
val map = friends.associateBy({it.facebookId}, {it.points})

第二个性能较差的功能是使用标准的map函数创建一个Pair列表,该列表可由toMap用于生成最终映射:

1
val map = friends.map { it.facebookId to it.points }.toMap()


1。从Listmap具有associate功能

对于kotlin 1.3,List有一个称为associate的函数。associate声明如下:

1
fun <T, K, V> Iterable<T>.associate(transform: (T) -> Pair<K, V>): Map<K, V>

Returns a Map containing key-value pairs provided by transform function applied to elements of the given collection.

用途:

1
2
3
4
5
6
7
8
9
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}
}

。2。从Listmap具有associateBy功能

对于Kotlin,List有一个称为associateBy的函数。associateBy声明如下:

1
fun <T, K, V> Iterable<T>.associateBy(keySelector: (T) -> K, valueTransform: (T) -> V): Map<K, V>

Returns a Map containing the values provided by valueTransform and indexed by keySelector functions applied to elements of the given collection.

用途:

1
2
3
4
5
6
7
8
9
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执行此任务:

1
2
val list = listOf("a","b","c","d")
val m: Map<String, Int> = list.associate { it to it.length }

在本例中,来自List的字符串成为键,它们相应的长度(作为示例)成为映射内的值。


在RC版本上已经改变了。

我用的是val map = list.groupByTo(destinationMap, {it.facebookId}, { it -> it.point })


例如,您有如下字符串列表:

1
val list = listOf("a","b","c","d")

您需要将它转换为一个映射,其中字符串是键。

有两种方法可以做到这一点:

第一个也是最具性能的是使用associateBy函数,该函数使用两个lambda来生成键和值,并在创建映射时输入:

1
val map = friends.associateBy({it.facebookId}, {it.points})

第二个性能较低的方法是使用标准映射函数创建一个对列表,to map可以使用该列表生成最终映射:

1
val map = friends.map { it.facebookId to it.points }.toMap()

资料来源:https://hype.codes/how-convert-list-map-kotlin