Kotlin 数组 - groupBy() 函数



Kotlin 数组的 groupBy() 函数用于根据指定的键选择器函数对原始数组中的元素进行分组。它返回一个 Map,其中键是键选择器函数的结果,值是与每个键对应的元素列表。

返回的映射保留了从原始数组生成的键的条目迭代顺序。

语法

以下是 Kotlin 数组 groupBy() 函数的语法:

fun <T, K> Iterable<T>.groupBy( keySelector: (T) -> K): Map<K, List<T>>

参数

此函数接受一个selector: (T) -> (k) 函数。这是一个 lambda 函数,用于定义如何为数组中的每个元素选择一个键。'T' 是数组中元素的类型,'k' 是选择器函数返回的键的类型。

返回值

此函数返回一个映射。

示例 1

以下是一个演示 groupBy() 函数用法的基本示例:

fun main(args: Array<String>){
   val words = arrayOf("tutorialspoint", "tutorix", "kotlin", "Hyderabad", "Noida", "India")

   val byLength = words.groupBy { it.length }
   
   println(byLength)
   println(byLength.keys)
   println(byLength.values)
}

输出

执行上述代码后,我们将获得以下结果:

{14=[tutorialspoint], 7=[tutorix], 6=[kotlin], 9=[Hyderabad], 5=[Noida, India]}
[14, 7, 6, 9, 5]
[[tutorialspoint], [tutorix], [kotlin], [Hyderabad], [Noida, India]]

示例 2

现在,让我们看另一个例子。在这里,我们正在创建一个对列表,并使用groupBy()对所有具有其角色的元素进行分组:

fun main(args: Array<String>) {
   val nameToTeam = listOf("Aman" to "Developer", "Amansha" to "Devloper", "tuorialspoint" to "EdTech", "tutorix" to "Tuition center")
   val namesByTeam = nameToTeam.groupBy({ it.second }, { it.first })
   println(namesByTeam)
}

输出

执行上述代码后,我们将获得以下输出:

​
{Developer=[Aman], Devloper=[Amansha], EdTech=[tuorialspoint], Tuition center=[tutorix]}

示例 3

以下示例使用类和对象。然后,我们创建一个包含对象的数组,并使用 groupBy() 函数按类对数组中的对象进行分组:

import kotlin.reflect.KClass
fun main(args: Array<String>){
   val people = arrayOf(
       Employer("John", 42),
       Employer("Mark", 38),
       Employee("Sunny", 27, 35000.0),
       Employee("Joseph", 32, 41000.0)
   )
   //groupingBy
   val byType: Map<KClass<*>, List<Any>> = people.groupBy{ it.javaClass.kotlin }
   println("Employers: ${byType[Employer::class]}")
   println("Employees: ${byType[Employee::class]}")
}
//classes
data class Employer(val name: String, val age: Int)
data class Employee(val name: String, val age: Int, val salaray: Double)

输出

上述代码产生以下输出:

Employers: [Employer(name=John, age=42), Employer(name=Mark, age=38)]
Employees: [Employee(name=Sunny, age=27, salaray=35000.0), Employee(name=Joseph, age=32, salaray=41000.0)]
kotlin_arrays.htm
广告