Kotlin:高阶函数来计算列表中出现的次数?
问题描述:
我正在尝试使用Kotlin的高阶函数来计算列表中包含特定元素的次数。我试过类似Kotlin:高阶函数来计算列表中出现的次数?
val result: Int? = list.count{ list.contains("element") }
但它似乎是返回列表的大小,我不知道为什么。
答
您检查列表是否包含给定元素(这将导致0
或列表的大小),但您实际需要的是计算与给定元素相同的元素数(而不是整个列表)。
您需要做的是将list.contains("element")
更改为it == "element"
。
count
函数通过迭代列表并检查元素是否与谓词匹配来工作。 近似码
fun <T> Iterable<T>.count(predicate: (T) -> Boolean) {
var count = 0
for (element in this) {
if (predicate(this)) {
count += 1
}
}
return count
}
当您通过list.contains("element")
作为参数,则count
功能,或者是因为它会检查同样的事情list.size
次返回0或list.size
。
做it == "element"
虽然工作方式不同。而不是检查整个列表,只检查当前元素。如果你来自Java背景,那么你可能会更容易想到it
这样:在Java中,如果你有一个只有1个参数的高阶函数,并且不需要Kotlin,那么代码看上去有点像(element) -> element.equals("element")
没有明确地命名它,那么它默认为it
。你可以阅读更多关于它here。