您将如何在函数中返回带有列表参数的 MutableMap(HashMap) 以查找列表中每个元素的频率Kotlin

问题描述

fun main() {
    val list = listof("B","A","C","B","A")
    print(findfrequency(list))
}

fun <T> findfrequency(list: T): MutableMap<String,Int> {
    val frequencyMap: MutableMap<String,Int> = HashMap()
 
    for (s in list) {
        var count = frequencyMap[s]
        if (count == null) count = 0
        frequencyMap[s] = count + 1
    }
    
    return frequencyMap
}

解决方法

解决方案:变量列表不需要泛型类型声明,只需在函数参数中添加<String>即可。 这是最终的程序:

fun main() {
    val list_String = listOf("B","A","C","B","A")
    println(findfreq(list_String))
}

fun findfreq(list: List<String>): MutableMap<String,Int> {
    val frequencyMap: MutableMap<String,Int> = HashMap()
    
    for(i in list) {
        var count = frequencyMap[i]
        if(count == null) count = 0
        frequencyMap[i] = count + 1
    }
    
    return frequencyMap
}

Playground link

,

当你将一个字符串列表放入一个类型为 T 的函数中时,它的类型在运行时是未知的,并且你试图迭代这个未知类型。因此,您必须指明该对象可用于与之交互。

fun main() {
    val list = listOf("B","A")
    print(findfrequency(list))
}

fun <T : Iterable<String>> findfrequency(list: T): MutableMap<String,Int> = HashMap()

    for (s in list) {
        var count = frequencyMap[s]
        if (count == null) count = 0
        frequencyMap[s] = count + 1
    }

    return frequencyMap
}

在下面的示例中,我们不再像上面那样依赖 String 类型。但是,在输出中,我们会得到一个这种类型的 Map。

fun <T : Iterable<S>,S> findfrequency(list: T): MutableMap<S,Int> {
    val frequencyMap: MutableMap<S,Int> = HashMap()

    for (s in list) {
        var count = frequencyMap[s]
        if (count == null) count = 0
        frequencyMap[s] = count + 1
    }

    return frequencyMap
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...