要按我可以使用的键排序
map.toSortedMap()
但是在 Kotlin 中按值对 LinkedHashMap 进行排序的最佳方法是什么?
map.toList()
.sortedBy { (key, value) -> value }
.toMap()
您可以将
sortedBy
与解构语法一起使用,并将第一个参数留空:
map.toList().sortedBy { (_, value) -> value }.toMap()
或者您可以在不解构语法的情况下完成此操作(如评论中aksh1618所述):
map.toList().sortedBy { it.second }.toMap()
如果你想立即迭代结果,你甚至不需要
toMap()
:
map.toList()
.sortedBy { it.second }
.forEach { (key, value) -> /* ... */ }
我不明白你为什么接受这个复杂的答案。
var mapImmutable = mapOf<Int, Int>(1 to 11, 2 to 22, 3 to 33)
println(mapImmutable.toSortedMap(compareByDescending { mapImmutable[it] })) //{3=33, 2=22, 1=11}
mapImmutable[it]
是值compareBy
函数
考虑 Map
val map = list // List<String>
.groupingBy { it }
.eachCount() // Creates a Map<String, Int> where the Value is the count of repeated Keys.
map.toSortedMap(compareBy<String> { map[it] }) // Must have the Key type (String) in the comparator
我们可以使用 Map
键和值升序
map.toSortedMap(compareBy<String> { map[it] }.thenBy { it })
键和值降序
map.toSortedMap(compareByDescending<String> { map[it] }.thenByDescending { it })
键降序和值升序
map.toSortedMap(compareByDescending<String> { map[it] }.thenBy { it })