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
廣告