问题描述
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
}
,
当你将一个字符串列表放入一个类型为 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
}